@inkeep/open-knowledge 0.71.7 → 0.72.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +54 -54
- package/dist/constants-C2sFQ-ut.mjs +1 -0
- package/dist/{dist-DsaTRpAv.mjs → dist-C7Oi9AkI.mjs} +481 -481
- package/dist/{dist-Cq96M7zq.mjs → dist-s4KdL8xn.mjs} +1 -1
- package/dist/index.mjs +169 -169
- package/dist/init-B6J0LwAj.mjs +1 -0
- package/dist/{init-BjzAy9ci.mjs → init-DdkNne7X.mjs} +63 -63
- package/dist/{launch-json-removal-DMD-44kV.mjs → launch-json-removal-CtCgfHIV.mjs} +1 -1
- package/dist/{loader-BWovV0v-.mjs → loader-BMlNYLSo.mjs} +1 -1
- package/dist/loader-C9weUSCP.mjs +1 -0
- package/dist/{md-manager-BGnqyqi1-I1w3knRG.mjs → md-manager-BGnqyqi1-hmuoZRep.mjs} +152 -152
- package/dist/{open-browser-pXGFLi7w.mjs → open-browser-B9QXUTKM.mjs} +1 -1
- package/dist/parse-worker.mjs +1 -1
- package/dist/preview-D4hBn5zd.mjs +1 -0
- package/dist/{preview-p0u3B2o7.mjs → preview-hbhV_wcx.mjs} +1 -1
- package/dist/public/assets/{ActivityModeContent-C24KgNKp.js → ActivityModeContent-BSKSxQkW.js} +1 -1
- package/dist/public/assets/AddPropertiesButton-C3dmN-ll.js +2 -0
- package/dist/public/assets/{AgentDiffPane-Bvvhv_01.js → AgentDiffPane-DWY1J3oQ.js} +1 -1
- package/dist/public/assets/{AgentThreadClientBinder-DP_nmH_9.js → AgentThreadClientBinder-Cr9ETN3r.js} +1 -1
- package/dist/public/assets/{BugReportHistory-BqIVquYg.js → BugReportHistory-DDskcX7v.js} +1 -1
- package/dist/public/assets/{BugReportHistoryDialog-B-D82_t-.js → BugReportHistoryDialog-CvNcrBPU.js} +1 -1
- package/dist/public/assets/CodeMirrorPropInput-D7qjFBS1.js +3 -0
- package/dist/public/assets/{ConfigSharingInfoTooltip-BuYGzKLA.js → ConfigSharingInfoTooltip-nR8InNBq.js} +1 -1
- package/dist/public/assets/ConsentDialogBody-D5Rtg_0O.js +2 -0
- package/dist/public/assets/{DiffViewBoundary-adNbZiZy.js → DiffViewBoundary-PIidsEB0.js} +1 -1
- package/dist/public/assets/DocumentContext-C9S71wln.js +39 -0
- package/dist/public/assets/{EditorModeToggle-DVMmrqG-.js → EditorModeToggle-DYEsuS22.js} +1 -1
- package/dist/public/assets/{EnableSyncConfirmDialog-CZUuF3GZ.js → EnableSyncConfirmDialog-BMcjAXQG.js} +1 -1
- package/dist/public/assets/{ExcalidrawDocEditor-D8YC7vQl.js → ExcalidrawDocEditor-C3FFb5-7.js} +1 -1
- package/dist/public/assets/FeedbackForm-Cj96AEa6.js +1 -0
- package/dist/public/assets/{GraphPanel-Dbd1qPTJ.js → GraphPanel-DImIytId.js} +2 -2
- package/dist/public/assets/{ImageAttachments-DPB_G5ll.js → ImageAttachments-mGJuIugG.js} +1 -1
- package/dist/public/assets/{ImportSkillDialog-B4G78y97.js → ImportSkillDialog-CUfZ9NoH.js} +1 -1
- package/dist/public/assets/{LintConfigEditor-CEfuQorE.js → LintConfigEditor-Cy4ux0rD.js} +1 -1
- package/dist/public/assets/ManagedArtifactProperties-0jExcUJJ.js +1 -0
- package/dist/public/assets/{ManagedArtifactProperties-D2TrNZYC.js → ManagedArtifactProperties-D4h09k-o.js} +1 -1
- package/dist/public/assets/{McpConsentDialogBody-CBlhR4aV.js → McpConsentDialogBody-D2Q0gKrR.js} +1 -1
- package/dist/public/assets/{Mermaid-SmRHELBV.js → Mermaid-kh2E8eKv.js} +1 -1
- package/dist/public/assets/{MermaidDocEditor-BJ4e4Aej.js → MermaidDocEditor-hwnJqayq.js} +1 -1
- package/dist/public/assets/{PropertyDisplayRow-CAfIhsrn.js → PropertyDisplayRow-BSqCQQy1.js} +1 -1
- package/dist/public/assets/{RegisteredAgentIcon-DO05Zsgw.js → RegisteredAgentIcon-F77Pc7UX.js} +1 -1
- package/dist/public/assets/{ReportBugDialogBody-BGk9OXk6.js → ReportBugDialogBody-BqrpJzQN.js} +2 -2
- package/dist/public/assets/{ReportBugMenuTrigger-DMJApmCu.js → ReportBugMenuTrigger-DVxOktVo.js} +2 -2
- package/dist/public/assets/{SchemaConfigEditor-B8EG5k1b.js → SchemaConfigEditor-Cx7OUpSv.js} +1 -1
- package/dist/public/assets/{SessionsHost-C2DGes3g.js → SessionsHost-C1UHXxRY.js} +2 -2
- package/dist/public/assets/{SettingsDialogBody-B24nHBps.js → SettingsDialogBody-C0Aa7J1R.js} +4 -4
- package/dist/public/assets/{ShareBranchSwitchDialog-Brk63ToM.js → ShareBranchSwitchDialog-CElKP5--.js} +1 -1
- package/dist/public/assets/{ShareReceiveDialog-DugUU6H-.js → ShareReceiveDialog-eUYbafbL.js} +1 -1
- package/dist/public/assets/{ShareReceiveMissDialog-BBXw8jYw.js → ShareReceiveMissDialog-B8LN6NsE.js} +1 -1
- package/dist/public/assets/{SkillCostValue-CPvt1R0K.js → SkillCostValue-CYiM4fwH.js} +1 -1
- package/dist/public/assets/{SkillEditBanner-BhGvQjS6.js → SkillEditBanner-BjpFp0Tk.js} +1 -1
- package/dist/public/assets/{SkillForkDialog-Dn8iYTBx.js → SkillForkDialog-Ck7P6_L6.js} +1 -1
- package/dist/public/assets/{SkillInstallMenu-CPWBzZvu.js → SkillInstallMenu-BMs-csgk.js} +2 -2
- package/dist/public/assets/{SkillOriginInline-KZ1bl1g3.js → SkillOriginInline-DypsP1oA.js} +1 -1
- package/dist/public/assets/{SkillToolbarControls-DbJvydAV.js → SkillToolbarControls-VU85I8r5.js} +1 -1
- package/dist/public/assets/{SlidesToolbarControls-DjbXp2gZ.js → SlidesToolbarControls-sZ8C08CO.js} +1 -1
- package/dist/public/assets/SourceEditor-DdrHMt6G.js +1 -0
- package/dist/public/assets/{TerminalPanel-BDiOHKAS.js → TerminalPanel-BZR5LPrA.js} +3 -3
- package/dist/public/assets/{TerminalStartingNotice-Dx7WuMrs.js → TerminalStartingNotice-BA6-yv9t.js} +1 -1
- package/dist/public/assets/{TerminalWindowApp-ChFXb2Qk.js → TerminalWindowApp-DufH5Hx_.js} +1 -1
- package/dist/public/assets/{TextDocEditor-DIaQTzqy.js → TextDocEditor-C_5JBwto.js} +1 -1
- package/dist/public/assets/ThreadView-PrKYwlvF.js +15 -0
- package/dist/public/assets/{TimelineDiffPane-DbydLd8H.js → TimelineDiffPane-CpWA2fXb.js} +1 -1
- package/dist/public/assets/{agent-diff-store-DmGK0F1i.js → agent-diff-store-DQQcfBXg.js} +1 -1
- package/dist/public/assets/auth-state-cache-C2VvxhnG.js +11 -0
- package/dist/public/assets/{bug-report-send-manager-CQk0wAIh.js → bug-report-send-manager-LuGwxlhw.js} +1 -1
- package/dist/public/assets/{checkbox-Crs_F_Np.js → checkbox-B-MvAL6W.js} +1 -1
- package/dist/public/assets/client-version-DL6f3Eze.js +1 -0
- package/dist/public/assets/{comment-chips-DQBo2lXi.js → comment-chips-DYOG7PYn.js} +1 -1
- package/dist/public/assets/{config-provider-DQrDvyOl.js → config-provider-CweylYd4.js} +3 -3
- package/dist/public/assets/css-color-to-hex-DSVb9_xg.js +1 -0
- package/dist/public/assets/{dist-BtM-eRCP.js → dist-CsoN3WVg.js} +1 -1
- package/dist/public/assets/{doc-hash-DuqGWmIR.js → doc-hash-CYZIWizw.js} +1 -1
- package/dist/public/assets/{doc-undo-manager-g8yw6SU1.js → doc-undo-manager-DzHL90Tw.js} +1 -1
- package/dist/public/assets/{documents-events-BWGH8AZm.js → documents-events-KOPTKKT9.js} +1 -1
- package/dist/public/assets/{file-tree-adapter-7t_Jxx39.js → file-tree-adapter-alngEyLn.js} +1 -1
- package/dist/public/assets/{file-tree-utils-BHK-SRnW.js → file-tree-utils-DQCU70Xb.js} +1 -1
- package/dist/public/assets/{folder-config-api-CIm0Cp93.js → folder-config-api-Bmb3KTlK.js} +1 -1
- package/dist/public/assets/i18n-DQjeEGli.js +1 -0
- package/dist/public/assets/index-IWrOVhV7.js +2205 -0
- package/dist/public/assets/{lint-config-client-DIc0G5Tz.js → lint-config-client-BJWh3vFX.js} +1 -1
- package/dist/public/assets/{markdownlint-rule-browser-94SDLcDi.js → markdownlint-rule-browser-BcHGYaC4.js} +1 -1
- package/dist/public/assets/messages-AXHLeGQt.js +1 -0
- package/dist/public/assets/messages-Bad1epmU.js +1 -0
- package/dist/public/assets/messages-BarCysIY.js +1 -0
- package/dist/public/assets/messages-Bf_tPcA9.js +1 -0
- package/dist/public/assets/messages-C4ywd-AF.js +1 -0
- package/dist/public/assets/messages-CIKZ4K8H.js +1 -0
- package/dist/public/assets/messages-CcZON2A3.js +1 -0
- package/dist/public/assets/messages-D5EuoIQc.js +1 -0
- package/dist/public/assets/messages-DkfioSU7.js +1 -0
- package/dist/public/assets/messages-R0HmfG3t.js +1 -0
- package/dist/public/assets/messages-dRWrlTPQ.js +1 -0
- package/dist/public/assets/messages-nzLvVaOP.js +1 -0
- package/dist/public/assets/navigation-targets-BVaXLrtB.js +1 -0
- package/dist/public/assets/{page-list-cache-zDjyCETV.js → page-list-cache-PSfXHiyQ.js} +1 -1
- package/dist/public/assets/{pending-receive-nav-store-C9zJmNSR.js → pending-receive-nav-store-DbY1aNlr.js} +1 -1
- package/dist/public/assets/progress-BB9J1mc2.js +9 -0
- package/dist/public/assets/{project-paths-960ETy7U.js → project-paths-DcbAbull.js} +1 -1
- package/dist/public/assets/{prop-types-BjIgGE16.js → prop-types-D1hAwTEd.js} +1 -1
- package/dist/public/assets/{receive-store-CBcJJRFA.js → receive-store-vreBP997.js} +1 -1
- package/dist/public/assets/{selection-context-Di2DO5CK.js → selection-context-BUc5Gs38.js} +1 -1
- package/dist/public/assets/{skill-scope-B6bHwenU.js → skill-scope-CZxo9iBd.js} +1 -1
- package/dist/public/assets/{skills-api-C3qsIon9.js → skills-api-DaUEGHn_.js} +1 -1
- package/dist/public/assets/{src-CdbVi-VE.js → src-of-xw_jT.js} +1 -1
- package/dist/public/assets/{startup-marks-swtqxoLx.js → startup-marks-DLeZtJmj.js} +1 -1
- package/dist/public/assets/{tag-pill-input-ByBaUmhF.js → tag-pill-input-CsHHTYuv.js} +1 -1
- package/dist/public/assets/{target-navigation-intent-CuO6wtCU.js → target-navigation-intent-CObszLg5.js} +1 -1
- package/dist/public/assets/{telemetry-impl-Djs-mvzd.js → telemetry-impl-BU_i-Mtv.js} +1 -1
- package/dist/public/assets/{telemetry-startup-Dgnan_Me.js → telemetry-startup-rdebVRWm.js} +1 -1
- package/dist/public/assets/terminal-bAqZh2Fr.js +1 -0
- package/dist/public/assets/{terminal-cli-display-D_AH6BSk.js → terminal-cli-display-COu7VoeL.js} +1 -1
- package/dist/public/assets/{terminal-command-events-B4M-54dr.js → terminal-command-events-p5EcIMFY.js} +1 -1
- package/dist/public/assets/{terminal-launch-events-DeMYbk3B.js → terminal-launch-events-BPa_Ncv3.js} +1 -1
- package/dist/public/assets/{terminal-telemetry-aJ6-t74p.js → terminal-telemetry-7Ys2mZMy.js} +1 -1
- package/dist/public/assets/{typing-burst-detector-B_Zi_fiw.js → typing-burst-detector-Dh6-rH64.js} +4 -4
- package/dist/public/assets/{uninstall-Bk0idZ9m.js → uninstall-Dal1w59t.js} +1 -1
- package/dist/public/assets/{use-activity-panel-DZtlbBNZ.js → use-activity-panel-BlKd2ENk.js} +1 -1
- package/dist/public/assets/{use-collab-url-DfAQJAka.js → use-collab-url-D3dqt-_X.js} +1 -1
- package/dist/public/assets/{use-conflicts-DGntG5Qo.js → use-conflicts-DBPLs_iO.js} +1 -1
- package/dist/public/assets/{use-live-xterm-theme-BWa5evl7.js → use-live-xterm-theme-BS0Xjqrp.js} +1 -1
- package/dist/public/assets/{use-open-skill-Btm827GX.js → use-open-skill-D0zgZv3_.js} +1 -1
- package/dist/public/assets/{use-settings-route-hhiF55zj.js → use-settings-route-Clcs-HGF.js} +1 -1
- package/dist/public/assets/{use-skill-origin--Dz7Uy4F.js → use-skill-origin-c2hL8l8D.js} +1 -1
- package/dist/public/assets/{use-skills-CSN-LidQ.js → use-skills-FyqcYg2s.js} +1 -1
- package/dist/public/assets/{use-terminal-enabled-DYzYENzH.js → use-terminal-enabled-DmKkIaRB.js} +1 -1
- package/dist/public/assets/{use-timeline-entry-diff-DoJF0gl-.js → use-timeline-entry-diff-RnNhfLnG.js} +4 -4
- package/dist/public/assets/{use-workspace-I562aeNt.js → use-workspace-CSw7_QPW.js} +1 -1
- package/dist/public/index.html +72 -72
- package/dist/public/uninstall.html +7 -7
- package/dist/{registry-probes-CyYWP5PX.mjs → registry-probes-2XdUdFfg.mjs} +2 -2
- package/dist/{removal-file-path-CSbwRHIY.mjs → removal-file-path-D4_z7MqE.mjs} +1 -1
- package/dist/{repair-launch-json-DHvM8qP-.mjs → repair-launch-json-ix1eXaJU.mjs} +1 -1
- package/dist/{repair-mcp-configs-B3XsJHOt.mjs → repair-mcp-configs-DQTYCPj-.mjs} +1 -1
- package/dist/src-CLGfVFCQ.mjs +1 -0
- package/dist/src-DFjOk0D0.mjs +11 -0
- package/dist/{start-DNA-HoqI.mjs → start-DBgivHvN.mjs} +3 -3
- package/dist/start-aC_vE1aA.mjs +1 -0
- package/package.json +5 -5
- package/dist/constants-BQ-TCrpS.mjs +0 -1
- package/dist/init-CYDXbzN5.mjs +0 -1
- package/dist/loader-DzTfiUgx.mjs +0 -1
- package/dist/preview-C48WV1Iy.mjs +0 -1
- package/dist/public/assets/AddPropertiesButton-DF3g4Kwr.js +0 -2
- package/dist/public/assets/CodeMirrorPropInput-BHl8UEr3.js +0 -3
- package/dist/public/assets/ConsentDialogBody-7wMM91sQ.js +0 -2
- package/dist/public/assets/DocumentContext-JLD5PPhL.js +0 -38
- package/dist/public/assets/FeedbackForm-cj3i2d-x.js +0 -1
- package/dist/public/assets/ManagedArtifactProperties-CTxT6-h3.js +0 -1
- package/dist/public/assets/SourceEditor-DVaSbjqJ.js +0 -1
- package/dist/public/assets/ThreadView-MF8W-BXC.js +0 -15
- package/dist/public/assets/auth-state-cache-BmIS4nys.js +0 -11
- package/dist/public/assets/client-version-C0XGnOwf.js +0 -1
- package/dist/public/assets/css-color-to-hex-DkX_3Tbi.js +0 -1
- package/dist/public/assets/i18n-BihTB2it.js +0 -1
- package/dist/public/assets/index-CobxLX9l.js +0 -2205
- package/dist/public/assets/messages-BVmWopHv.js +0 -1
- package/dist/public/assets/messages-BYF487KC.js +0 -1
- package/dist/public/assets/messages-Ba7hA1-i.js +0 -1
- package/dist/public/assets/messages-BmxqLTvu.js +0 -1
- package/dist/public/assets/messages-BnFyqYis.js +0 -1
- package/dist/public/assets/messages-C16gG4yf.js +0 -1
- package/dist/public/assets/messages-CqtZbqmN.js +0 -1
- package/dist/public/assets/messages-CuDjMaKo.js +0 -1
- package/dist/public/assets/messages-DDK4Na9D.js +0 -1
- package/dist/public/assets/messages-DJy4WeZ_.js +0 -1
- package/dist/public/assets/messages-DUp4BhrU.js +0 -1
- package/dist/public/assets/messages-x9A7h6fC.js +0 -1
- package/dist/public/assets/navigation-targets-CQLH4NW1.js +0 -1
- package/dist/public/assets/progress-BNikaukM.js +0 -9
- package/dist/public/assets/terminal-WtPHPKhg.js +0 -1
- package/dist/src-BIA89bBb.mjs +0 -1
- package/dist/src-Bc3P8FGr.mjs +0 -11
- package/dist/start-DnhcnDi1.mjs +0 -1
- /package/dist/public/assets/{ThemePicker-aWkT89kw.js → ThemePicker-DOsOc-E2.js} +0 -0
- /package/dist/public/assets/{eye-BtMXolFK.js → eye-BQkq4vEg.js} +0 -0
- /package/dist/public/assets/{folder-open-dlosmFj2.js → folder-open-BaM9INLo.js} +0 -0
- /package/dist/public/assets/{hash-d98LeeWB.js → hash-Dglwn3ro.js} +0 -0
- /package/dist/public/assets/{info-CilGMBpP.js → info-SOxUaHbk.js} +0 -0
- /package/dist/public/assets/{list-plus-BmoxCvSM.js → list-plus-DOCJc_At.js} +0 -0
- /package/dist/public/assets/{maximize-2-DaY3HCwc.js → maximize-2-DxqkwIPV.js} +0 -0
- /package/dist/public/assets/{minus-cd1ERTPg.js → minus-1czdqXPL.js} +0 -0
- /package/dist/public/assets/{miss-dialog-store-CNJRdTPE.js → miss-dialog-store-Bk8_yXT9.js} +0 -0
- /package/dist/public/assets/{package-DCh1ji9x.js → package-CHRzycGO.js} +0 -0
- /package/dist/public/assets/{panel-right-open-Dx0ZAduW.js → panel-right-open-8vaSAKL0.js} +0 -0
- /package/dist/public/assets/{paperclip-p1q4JO6T.js → paperclip-DgND7swz.js} +0 -0
- /package/dist/public/assets/{refresh-cw-DgTHxKWl.js → refresh-cw-CgRx7hPO.js} +0 -0
- /package/dist/public/assets/{spinner-Bp2_BYkl.js → spinner-84U_t9u0.js} +0 -0
- /package/dist/public/assets/{square-pen-zPTA2xeB.js → square-pen-DACj4fA5.js} +0 -0
package/dist/cli.mjs
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{o as e}from"./rolldown-runtime-tZXQYakl.mjs";import{
|
|
3
|
-
`)}const
|
|
4
|
-
`))}return+(t.errorsOnly===!0?m.errorCount>0:m.errorCount+m.warningCount>0)}function
|
|
5
|
-
`)){let e=n.trim();if(e===``)continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r)]=e.slice(r+1))}return t}function
|
|
2
|
+
import{o as e}from"./rolldown-runtime-tZXQYakl.mjs";import{Au as t,Bl as n,Bs as r,Co as i,Cs as a,Cu as o,Dc as s,Ea as c,Fu as l,Ga as u,Gu as d,Hu as f,Iu as p,Lu as m,Nc as h,No as g,Ou as _,Rc as v,Rt as y,Ru as b,Sa as x,Sc as S,Su as ee,Tl as C,Ws as te,Xi as ne,Xs as re,Yn as ie,Yu as ae,_u as oe,bd as se,dd as ce,ds as le,el as ue,et as de,fu as fe,gd as pe,go as me,hd as he,ko as ge,ku as w,ls as _e,ml as ve,mo as ye,pl as be,qo as xe,rt as Se,sc as Ce,sd as we,ta as Te,uc as Ee,wu as De,xd as Oe}from"./md-manager-BGnqyqi1-hmuoZRep.mjs";import{Ao as ke,At as Ae,B as je,Bn as Me,Br as Ne,C as Pe,Ci as Fe,Co as Ie,Cr as Le,Ct as Re,E as ze,F as Be,Fn as Ve,I as He,Ji as Ue,Mi as We,Mo as Ge,Mt as Ke,Ni as qe,Oo as Je,Pi as Ye,Qa as T,Qn as Xe,Qr as Ze,Qt as Qe,Rn as $e,So as et,Sr as tt,Ti as nt,To as rt,Ui as it,Uo as at,Wa as ot,Wi as st,Xi as E,Yi as ct,Yn as lt,Yt as ut,Zi as dt,Zn as ft,Zr as pt,_t as mt,an as ht,ao as gt,ar as _t,b as vt,bo as yt,bt,co as xt,d as St,dn as Ct,do as wt,dt as Tt,ei as Et,fn as Dt,fo as Ot,ga as kt,gi as At,gn as jt,ha as Mt,hi as Nt,hr as Pt,jo as Ft,ki as It,ko as Lt,kr as Rt,lo as zt,m as Bt,mi as Vt,mt as Ht,na as Ut,oi as Wt,on as Gt,ot as Kt,pi as qt,q as Jt,so as Yt,to as Xt,tr as Zt,un as Qt,uo as $t,ut as en,vi as tn,vn as nn,vr as rn,vt as an,wi as on,xo as sn,yo as cn,yt as ln,zn as un,zr as dn,zt as fn}from"./dist-C7Oi9AkI.mjs";import{D as pn,E as mn,F as hn,G as gn,H as _n,K as vn,M as yn,O as bn,P as xn,U as Sn,V as Cn,W as wn,X as Tn,Y as En,_t as Dn,dt as On,ft as kn,gt as An,ht as jn,j as Mn,mt as Nn,pt as Pn,q as Fn,u as In,vt as D,z as Ln}from"./init-DdkNne7X.mjs";import{_ as Rn,b as zn,d as Bn,f as Vn,g as Hn,h as Un,m as Wn,o as Gn,u as Kn,x as qn,y as Jn}from"./registry-probes-2XdUdFfg.mjs";import{C as Yn,S as Xn,T as Zn,_ as Qn,a as $n,b as er,c as tr,d as nr,f as rr,g as ir,i as ar,l as or,m as sr,n as cr,o as lr,p as ur,r as dr,s as fr,t as pr,u as mr,v as hr,w as gr,x as _r,y as vr}from"./src-DFjOk0D0.mjs";import{c as yr,i as O,n as k,o as A,r as j,s as M,t as N}from"./colors-r_owlCuY.mjs";import{n as br,r as xr,t as Sr}from"./dist-bundle-T0gq9zHH.mjs";import{E as Cr,S as wr,y as Tr}from"./start-DBgivHvN.mjs";import{n as Er,t as Dr}from"./constants-C2sFQ-ut.mjs";import{n as Or,t as kr}from"./loader-BMlNYLSo.mjs";import{t as Ar}from"./removal-file-path-D4_z7MqE.mjs";import{t as jr}from"./launch-json-removal-CtCgfHIV.mjs";import{execFile as Mr,execFileSync as Nr,execSync as Pr,spawn as Fr,spawnSync as Ir}from"node:child_process";import{basename as Lr,dirname as P,isAbsolute as Rr,join as F,posix as zr,relative as I,resolve as L,sep as Br,win32 as Vr}from"node:path";import Hr from"node:process";import{fileURLToPath as Ur}from"node:url";import{accessSync as Wr,appendFileSync as Gr,closeSync as Kr,constants as qr,existsSync as R,lstatSync as Jr,mkdirSync as z,mkdtempSync as Yr,readFileSync as B,readdirSync as Xr,readlinkSync as Zr,realpathSync as Qr,renameSync as $r,rmSync as ei,statSync as V,unlinkSync as H,writeFileSync as ti}from"node:fs";import{homedir as U,platform as ni,tmpdir as ri}from"node:os";import{rm as ii}from"node:fs/promises";import{randomUUID as ai}from"node:crypto";import{promisify as oi}from"node:util";import{setTimeout as si}from"node:timers/promises";import{createInterface as ci}from"node:readline/promises";const li={invalid_type:`invalid_type`,too_big:`too_big`,too_small:`too_small`,invalid_format:`invalid_format`,not_multiple_of:`not_multiple_of`,unrecognized_keys:`unrecognized_keys`,invalid_union:`invalid_union`,invalid_key:`invalid_key`,invalid_element:`invalid_element`,invalid_value:`invalid_value`,custom:`custom`};var ui;ui||={};function di(e){return ae(De,e)}async function fi(e){let{projectDir:t,contentDir:n,baseConfig:i,targetPath:a,fix:o=!1}=e,s=[],c=jt({projectDir:t,contentDir:n}),l=new Set,d=e=>{l.has(e)||(l.add(e),s.push(e))},f=Gt(t,i,d),p=u(f,{mode:`lint`}),m=[],h=e=>{m.push(e)},g=new Map,_=e=>{let t=P(e),r=g.get(t);if(r)return r;let i=dt(n,e,d),a=ht(f,i);return g.set(t,a),a},v=[],y=pi(a,n);y.kind===`file`?v.push(I(n,y.path)):b(y.path);function b(e){let t;try{t=Xr(e,{withFileTypes:!0})}catch(t){s.push(`could not read directory ${I(n,e)||`.`}: ${hi(t)}`);return}for(let r of t){if(r.name.startsWith(`.`))continue;let t=F(e,r.name),i=I(n,t);if(r.isDirectory()){if(c.isDirExcluded(i))continue;b(t)}else if(r.isFile()){if(!mi(r.name)||c.isExcluded(i))continue;v.push(i)}}}v.sort();let x=[],S=0,ee=0,C=0;for(let e of v){let t=F(n,e),r;try{r=B(t,`utf-8`)}catch(t){s.push(`could not read ${e}: ${hi(t)}`);continue}let i=_(e),a=!1;if(o&&i.enabled){let n=ye(r,i,e,h);if(n!==r){let i=`${t}.tmp.${process.pid}.${Date.now()}`;try{ti(i,n,`utf-8`),$r(i,t),r=n,a=!0,C++}catch(t){try{H(i)}catch{}s.push(`could not write fix to ${e}: ${hi(t)}`)}}}let c=await xe(r,i,e,h);for(let e of c)e.severity===`error`?S++:ee++;x.push({file:e,diagnostics:c,fixed:a})}return s.push(...r(m)),{contentDir:n,files:x,warnings:s,fileCount:v.length,errorCount:S,warningCount:ee,fixedCount:C,ran:p}}function pi(e,t){if(e===void 0||e===``)return{kind:`dir`,path:t};let n=Rr(e)?e:L(t,e);try{if(V(n).isFile())return{kind:`file`,path:n}}catch{}return{kind:`dir`,path:n}}function mi(e){let t=e.toLowerCase();return ie.some(e=>t.endsWith(e))}function hi(e){return e instanceof Error?e.message:String(e)}function gi(e){return new D(`lint`).description(`Lint markdown content (headless) — whole project, a folder, or a single file`).argument(`[path]`,`Folder or file to lint, relative to where you run the command`).option(`--json`,`Emit structured JSON instead of formatted text`).option(`--fix`,`Auto-fix fixable issues in place (markdownlint rules only)`).option(`--errors-only`,`Exit non-zero only on error-severity problems (findings are warning-severity unless your .markdownlint.* assigns a rule "error")`).action(async(t,n)=>{let r=e(),i=process.cwd(),a=st(r,i),o=t===void 0?void 0:_i(t,Yn()),s=r.contentRules,c=await fi({projectDir:i,contentDir:a,baseConfig:s?te(s):de,targetPath:o,fix:n.fix===!0});n.json===!0?process.stdout.write(`${JSON.stringify(c,null,2)}\n`):process.stdout.write(`${bi(c)}\n`),(n.errorsOnly===!0?c.errorCount>0:vi(c))&&(process.exitCode=1)})}function _i(e,t){return L(t,e)}function vi(e){return e.errorCount>0||e.warningCount>0}function yi(e){let t=[N(e.file)+(e.fixed?k(` (fixed)`):``)];for(let n of e.diagnostics){let e=k(`${n.range.start.line+1}:${n.range.start.character+1}`.padEnd(7)),r=n.severity===`error`?j(`error `):M(`warning`);t.push(` ${e} ${r} ${n.message} ${k(`${n.source}/${n.code}`)}`)}return t.push(``),t}function bi(e){let t=[];for(let n of e.files)n.diagnostics.length>0&&t.push(...yi(n));let n=e.errorCount+e.warningCount;if(n===0)t.push(A(`✓ No problems in ${e.fileCount} file${e.fileCount===1?``:`s`}.`));else{let r=[`${n} problem${n===1?``:`s`}`];r.push(`${e.errorCount} error${e.errorCount===1?``:`s`}`),r.push(`${e.warningCount} warning${e.warningCount===1?``:`s`}`),t.push(`${j(r[0]??``)} (${r[1]}, ${r[2]}) across ${e.fileCount} file${e.fileCount===1?``:`s`}.`)}if(e.fixedCount>0&&t.push(k(`Fixed ${e.fixedCount} file${e.fixedCount===1?``:`s`}.`)),t.push(...re(e.ran).map(e=>k(e))),e.warnings.length>0){t.push(``);for(let n of e.warnings)t.push(M(`! ${n}`))}return t.join(`
|
|
3
|
+
`)}const xi={out:e=>process.stdout.write(`${e}\n`),err:e=>process.stderr.write(`${e}\n`)};function Si(e){return new D(`audit`).description(`Unified validation audit (markdown lint + broken internal links) via the running project server`).argument(`[path]`,`Folder or file to audit, relative to where you run the command`).option(`--json`,`Emit the full structured JSON response instead of formatted text`).option(`--errors-only`,`Exit non-zero only on error-severity problems (broken links default to warnings; the project's validation.links setting can raise them to errors)`).action(async(t,n)=>{let r=await Ci(t,n,e(),process.cwd(),Yn());r!==0&&(process.exitCode=r)})}async function Ci(e,t,n,r,i,a=xi){let o=st(n,r),s;if(e!==void 0){let t=wi(e,i,o);if(t===null)return a.err(`Path is outside the content directory (${o}): ${e}`),1;s=t===``?void 0:t}let l=on(E(r));if(!l||l.port<=0)return a.err("OpenKnowledge server is not running — the links validator needs the live backlink index. Start it with `ok start` (or open OK Desktop) and re-run. For headless lint-only checks, use `ok lint`."),1;let u=`http://127.0.0.1:${l.port}`,d=s===void 0?``:`?path=${encodeURIComponent(s)}`,f;try{f=await fetch(`${u}/api/audit${d}`,{headers:c({kind:`cli`,runtimeVersion:Kt})})}catch(e){return a.err(`Could not reach the OpenKnowledge server on port ${l.port}: ${String(e)}`),1}if(!f.ok){let e=await f.json().catch(()=>({}));return a.err(`Audit failed: ${e.title??e.error??e.message??`server responded with ${f.status}`}`),1}let p=Te.safeParse(await f.json().catch(()=>null));if(!p.success){let e=p.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`; `);return a.err(`Audit failed: unexpected response shape from the server. Schema issues: ${e}`),1}let m=p.data;if(t.json===!0)a.out(JSON.stringify(m,null,2));else{let e=m.brokenLinkSuppression?Xe(m.brokenLinkSuppression,{surface:`cli`,serverBaseUrl:u}):void 0;a.out([bi(Ti(m)),...e===void 0?[]:[e]].join(`
|
|
4
|
+
`))}return+(t.errorsOnly===!0?m.errorCount>0:m.errorCount+m.warningCount>0)}function wi(e,t,n){let r=I(n,L(t,e));return r===``?``:r.startsWith(`..`)||Rr(r)?null:r.split(Br).join(`/`)}function Ti(e){return{files:e.files.map(e=>({file:e.file,fixed:!1,diagnostics:e.diagnostics})),warnings:e.warnings,fileCount:e.fileCount,errorCount:e.errorCount,warningCount:e.warningCount,fixedCount:0,ran:e.ran}}async function Ei(e,t,n,r){let i=Di(await Oi(e)).host??``,a=e=>e.replace(/[\r\n]/g,``);if(!i)return r?.log?.warn({outcome:`no-host`,backend:n.backend},`[auth] git-credential get`),1;let o=process.env.OK_GH_TOKEN,s=process.env.OK_GH_TOKEN_HOST;if(o&&s===i)return r?.log?.debug({host:i,outcome:`gh-env-token`,backend:n.backend,relayLogin:process.env.OK_GH_TOKEN_LOGIN},`[auth] git-credential get`),t.write(`username=x-access-token\npassword=${a(o)}\n`),0;let c=await n.get(i),l=r?.getDiag?.(),u=c==null?l?.kind??`absent`:`found`;if(r?.log){let e={host:i,outcome:u,backend:n.backend,...l?.error?{keychainError:l.error}:{}};u===`found`?r.log.debug(e,`[auth] git-credential get`):r.log.warn(e,`[auth] git-credential get`)}return c==null?1:(t.write(`username=${a(c.login)}\npassword=${a(c.token)}\n`),0)}function Di(e){let t={};for(let n of e.split(`
|
|
5
|
+
`)){let e=n.trim();if(e===``)continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r)]=e.slice(r+1))}return t}function Oi(e){return new Promise((t,n)=>{let r=[];e.on(`data`,e=>r.push(e)),e.on(`end`,()=>t(Buffer.concat(r).toString(`utf-8`))),e.on(`error`,n)})}function ki(e,t){let n=new D(`git-credential`);return n.description(`Git credential helper (git credential-helper protocol)`),n.command(`get`).description(`Lookup credentials from TokenStore (called by git)`).action(async()=>{let n=t?.();try{let t,r=await e({onKeychainRead:e=>{t=e},onBackendSelected:e=>{e.backend===`file`&&e.reason&&n?.warn({backend:`file`,reason:e.reason},`[auth] token storage fallback`)}}),i=await Ei(process.stdin,process.stdout,r,{log:n,getDiag:()=>t});await ft(n),process.exit(i)}catch(e){n?.error({err:e},`[auth] git-credential get: unexpected error`),await ft(n),process.exit(1)}}),n}function Ai(e){let t=e.endpoint.DEFAULTS;return/^https:\/\/(api\.)?github\.com$/.test(t.baseUrl)?`https://github.com`:t.baseUrl.replace(`/api/v3`,``)}async function ji(e,t,n){let r={baseUrl:Ai(e),headers:{accept:`application/json`},...n},i=await e(t,r);if(`error`in i.data){let n=new br(`${i.data.error_description} (${i.data.error}, ${i.data.error_uri})`,400,{request:e.endpoint.merge(t,r)});throw n.response=i,n}return i}async function Mi(e){let t=e.request||Sr,n={client_id:e.clientId};return`scopes`in e&&Array.isArray(e.scopes)&&(n.scope=e.scopes.join(` `)),ji(t,`POST /login/device/code`,n)}async function Ni(e){let t=await ji(e.request||Sr,`POST /login/oauth/access_token`,{client_id:e.clientId,device_code:e.code,grant_type:`urn:ietf:params:oauth:grant-type:device_code`}),n={clientType:e.clientType,clientId:e.clientId,token:t.data.access_token,scopes:t.data.scope.split(/\s+/).filter(Boolean)};if(`clientSecret`in e&&(n.clientSecret=e.clientSecret),e.clientType===`github-app`){if(`refresh_token`in t.data){let e=new Date(t.headers.date).getTime();n.refreshToken=t.data.refresh_token,n.expiresAt=Pi(e,t.data.expires_in),n.refreshTokenExpiresAt=Pi(e,t.data.refresh_token_expires_in)}delete n.scopes}return{...t,authentication:n}}function Pi(e,t){return new Date(e+t*1e3).toISOString()}async function Fi(e,t){let n=Ii(e,t.auth);if(n)return n;let{data:r}=await Mi({clientType:e.clientType,clientId:e.clientId,request:t.request||e.request,scopes:t.auth.scopes||e.scopes});await e.onVerification(r);let i=await Ri(t.request||e.request,e.clientId,e.clientType,r);return e.authentication=i,i}function Ii(e,t){if(t.refresh===!0||!e.authentication)return!1;if(e.clientType===`github-app`)return e.authentication;let n=e.authentication;return(`scopes`in t&&t.scopes||e.scopes).join(` `)===n.scopes.join(` `)&&n}async function Li(e){await new Promise(t=>setTimeout(t,e*1e3))}async function Ri(e,t,n,r){try{let i={clientId:t,request:e,code:r.device_code},{authentication:a}=n===`oauth-app`?await Ni({...i,clientType:`oauth-app`}):await Ni({...i,clientType:`github-app`});return{type:`token`,tokenType:`oauth`,...a}}catch(i){if(!i.response)throw i;let a=i.response.data.error;if(a===`authorization_pending`)return await Li(r.interval),Ri(e,t,n,r);if(a===`slow_down`)return await Li(r.interval+7),Ri(e,t,n,r);throw i}}async function zi(e,t){return Fi(e,{auth:t})}async function Bi(e,t,n,r){let i=t.endpoint.merge(n,r);if(/\/login\/(oauth\/access_token|device\/code)$/.test(i.url))return t(i);let{token:a}=await Fi(e,{request:t,auth:{type:`oauth`}});return i.headers.authorization=`token ${a}`,t(i)}var Vi=`0.0.0-development`;function Hi(e){let t=e.request||Sr.defaults({headers:{"user-agent":`octokit-auth-oauth-device.js/${Vi} ${xr()}`}}),{request:n=t,...r}=e,i=e.clientType===`github-app`?{...r,clientType:`github-app`,request:n}:{...r,clientType:`oauth-app`,request:n,scopes:e.scopes||[]};if(!e.clientId)throw Error(`[@octokit/auth-oauth-device] "clientId" option must be set (https://github.com/octokit/auth-oauth-device.js#usage)`);if(!e.onVerification)throw Error(`[@octokit/auth-oauth-device] "onVerification" option must be a function (https://github.com/octokit/auth-oauth-device.js#usage)`);return Object.assign(zi.bind(null,i),{hook:Bi.bind(null,i)})}async function Ui(e){let{clientId:t,scopes:n=[`repo`,`read:user`,`user:email`],onVerification:r,host:i}=e,a=i&&i!==`github.com`?`https://${i}/api/v3`:`https://api.github.com`,o=Hi({clientType:`oauth-app`,clientId:t,scopes:n,onVerification:async e=>{await r({verificationUri:e.verification_uri,userCode:e.user_code,expiresIn:e.expires_in,interval:e.interval})},request:a===`https://api.github.com`?void 0:(await import(`./dist-bundle-Dl9Hkg-Q.mjs`)).request.defaults({baseUrl:a})}),s;try{s=await o({type:`oauth`})}catch(e){if(e instanceof Error){let t=e.message.toLowerCase();throw t.includes(`access_denied`)?Error(`Device-flow authorization was denied.`):t.includes(`expired_token`)||t.includes(`timeout`)||t.includes(`timed out`)?Error(`Device-flow code expired before authorization — please try again.`):Error(`GitHub sign-in failed: ${e.message}`)}throw e}return{token:s.token,tokenType:s.tokenType,scopes:s.scopes??[]}}function Wi(){return process.env.OPEN_KNOWLEDGE_GITHUB_CLIENT_ID??`Ov23liqlSd0V1MwR6rhI`}function W(e){let t=e.toLowerCase().replace(/:\d+$/,``);y.has(t)&&(process.stderr.write(`Error: ${e} is not a GitHub host. Only GitHub and GitHub Enterprise Server are supported.\n`),process.exit(1))}function Gi(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function Ki(e,t,n=Ui){let r=Wi(),{host:i,json:a}=e;W(i),a||process.stderr.write(`Logging in to ${i}\n`);let o=await n({clientId:r,host:i===`github.com`?void 0:i,onVerification:e=>{e.userCode,e.verificationUri,a?Gi(!0,{type:`verification`,user_code:e.userCode,verification_uri:e.verificationUri,expires_in:e.expiresIn}):process.stderr.write(`Open: ${e.verificationUri}\nEnter code: ${e.userCode}\n`)}}),s=`unknown`,c,l;try{let e=i===`github.com`?`https://api.github.com`:`https://${i}/api/v3`,t=await fetch(`${e}/user`,{headers:{Authorization:`Bearer ${o.token}`,"User-Agent":`open-knowledge-cli`,Accept:`application/vnd.github+json`}});if(t.ok){let e=await t.json();s=e.login??s,c=e.name??void 0,l=e.email??void 0}}catch{}await t.set(i,s,o.token,{gitProtocol:`https`,name:c,email:l}),a?Gi(!0,{type:`complete`,host:i,login:s}):process.stderr.write(`✓ Logged in as ${s} on ${i}\n`)}function qi(e){return new D(`login`).description(`Authenticate with GitHub via Device Flow`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{let n=t.host??Wt(process.cwd()),r=await e();await Ki({...t,host:n},r)})}const Ji={style:{maskedText:`[input is masked]`}};var Yi=On((e,t)=>{let{validate:n=()=>!0}=e,r=jn(Ji,e.theme),[i,a]=An(`idle`),[o,s]=An(),[c,l]=An(``),u=Nn({status:i,theme:r});Pn(async(e,r)=>{if(i===`idle`){if(Dn(e)){let e=c;a(`loading`);let i=await n(e);i===!0?(l(e),a(`done`),t(e)):(r.write(c),s(i||`You must provide a valid value`),a(`idle`))}else l(r.line),s(void 0)}});let d=r.style.message(e.message,i),f=``,p;e.mask?f=(typeof e.mask==`string`?e.mask:`*`).repeat(c.length):i!==`done`&&(p=`${r.style.help(r.style.maskedText)}${kn}`),i===`done`&&(f=r.style.answer(f));let m=``;return o&&(m=r.style.error(o)),[[u,d,e.mask?f:p].join(` `),m]});function Xi(e,t,n,r){if(typeof n!=`function`)throw Error(`method for before hook must be a function`);return r||={},Array.isArray(t)?t.reverse().reduce((t,n)=>Xi.bind(null,e,n,t,r),n)():Promise.resolve().then(()=>e.registry[t]?e.registry[t].reduce((e,t)=>t.hook.bind(null,e,r),n)():n(r))}function Zi(e,t,n,r){let i=r;e.registry[n]||(e.registry[n]=[]),t===`before`&&(r=(e,t)=>Promise.resolve().then(i.bind(null,t)).then(e.bind(null,t))),t===`after`&&(r=(e,t)=>{let n;return Promise.resolve().then(e.bind(null,t)).then(e=>(n=e,i(n,t))).then(()=>n)}),t===`error`&&(r=(e,t)=>Promise.resolve().then(e.bind(null,t)).catch(e=>i(e,t))),e.registry[n].push({hook:r,orig:i})}function Qi(e,t,n){if(!e.registry[t])return;let r=e.registry[t].map(e=>e.orig).indexOf(n);r!==-1&&e.registry[t].splice(r,1)}const $i=Function.bind,ea=$i.bind($i);function ta(e,t,n){let r=ea(Qi,null).apply(null,n?[t,n]:[t]);e.api={remove:r},e.remove=r,[`before`,`error`,`after`,`wrap`].forEach(r=>{let i=n?[t,r,n]:[t,r];e[r]=e.api[r]=ea(Zi,null).apply(null,i)})}function na(){let e=Symbol(`Singular`),t={registry:{}},n=Xi.bind(null,t,e);return ta(n,t,e),n}function ra(){let e={registry:{}},t=Xi.bind(null,e);return ta(t,e),t}var ia={Singular:na,Collection:ra},aa=`0.0.0-development`;function oa(e){return`Request failed due to following response errors:
|
|
6
6
|
`+e.errors.map(e=>` - ${e.message}`).join(`
|
|
7
|
-
`)}var oa=class extends Error{constructor(e,t,n){super(aa(n)),this.request=e,this.headers=t,this.response=n,this.errors=n.errors,this.data=n.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name=`GraphqlResponseError`;errors;data},sa=[`method`,`baseUrl`,`url`,`headers`,`request`,`query`,`mediaType`,`operationName`],ca=[`query`,`method`,`url`],la=/\/api\/v3\/?$/;function ua(e,t,n){if(n){if(typeof t==`string`&&`query`in n)return Promise.reject(Error(`[@octokit/graphql] "query" cannot be used as variable name`));for(let e in n)if(ca.includes(e))return Promise.reject(Error(`[@octokit/graphql] "${e}" cannot be used as variable name`))}let r=typeof t==`string`?Object.assign({query:t},n):t,i=Object.keys(r).reduce((e,t)=>sa.includes(t)?(e[t]=r[t],e):(e.variables||={},e.variables[t]=r[t],e),{}),a=r.baseUrl||e.endpoint.DEFAULTS.baseUrl;return la.test(a)&&(i.url=a.replace(la,`/api/graphql`)),e(i).then(e=>{if(e.data.errors){let t={};for(let n of Object.keys(e.headers))t[n]=e.headers[n];throw new oa(i,t,e.data)}return e.data.data})}function da(e,t){let n=e.defaults(t);return Object.assign((e,t)=>ua(n,e,t),{defaults:da.bind(null,n),endpoint:n.endpoint})}da(xr,{headers:{"user-agent":`octokit-graphql.js/${ia} ${br()}`},method:`POST`,url:`/graphql`});function fa(e){return da(e,{method:`POST`,url:`/graphql`})}var pa=`(?:[a-zA-Z0-9_-]+)`,ma=`\\.`,ha=RegExp(`^${pa}${ma}${pa}${ma}${pa}$`),ga=ha.test.bind(ha);async function _a(e){let t=ga(e),n=e.startsWith(`v1.`)||e.startsWith(`ghs_`),r=e.startsWith(`ghu_`);return{type:`token`,token:e,tokenType:t?`app`:n?`installation`:r?`user-to-server`:`oauth`}}function va(e){return e.split(/\./).length===3?`bearer ${e}`:`token ${e}`}async function ya(e,t,n,r){let i=t.endpoint.merge(n,r);return i.headers.authorization=va(e),t(i)}var ba=function(e){if(!e)throw Error(`[@octokit/auth-token] No token passed to createTokenAuth`);if(typeof e!=`string`)throw Error(`[@octokit/auth-token] Token passed to createTokenAuth is not a string`);return e=e.replace(/^(token|bearer) +/i,``),Object.assign(_a.bind(null,e),{hook:ya.bind(null,e)})};const xa=`7.0.6`,Sa=()=>{},Ca=console.warn.bind(console),wa=console.error.bind(console);function Ta(e={}){return typeof e.debug!=`function`&&(e.debug=Sa),typeof e.info!=`function`&&(e.info=Sa),typeof e.warn!=`function`&&(e.warn=Ca),typeof e.error!=`function`&&(e.error=wa),e}const Ea=`octokit-core.js/${xa} ${br()}`;var Da=class{static VERSION=xa;static defaults(e){return class extends this{constructor(...t){let n=t[0]||{};if(typeof e==`function`){super(e(n));return}super(Object.assign({},e,n,n.userAgent&&e.userAgent?{userAgent:`${n.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let t=this.plugins;return class extends this{static plugins=t.concat(e.filter(e=>!t.includes(e)))}}constructor(e={}){let t=new ra.Collection,n={baseUrl:xr.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:t.bind(null,`request`)}),mediaType:{previews:[],format:``}};if(n.headers[`user-agent`]=e.userAgent?`${e.userAgent} ${Ea}`:Ea,e.baseUrl&&(n.baseUrl=e.baseUrl),e.previews&&(n.mediaType.previews=e.previews),e.timeZone&&(n.headers[`time-zone`]=e.timeZone),this.request=xr.defaults(n),this.graphql=fa(this.request).defaults(n),this.log=Ta(e.log),this.hook=t,e.authStrategy){let{authStrategy:n,...r}=e,i=n(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:r},e.auth));t.wrap(`request`,i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:`unauthenticated`});else{let n=ba(e.auth);t.wrap(`request`,n.hook),this.auth=n}let r=this.constructor;for(let t=0;t<r.plugins.length;++t)Object.assign(this,r.plugins[t](this,e))}request;graphql;log;hook;auth};function Oa(e){e.hook.wrap(`request`,(t,n)=>{e.log.debug(`request`,n);let r=Date.now(),i=e.request.endpoint.parse(n),a=i.url.replace(n.baseUrl,``);return t(n).then(t=>{let n=t.headers[`x-github-request-id`];return e.log.info(`${i.method} ${a} - ${t.status} with id ${n} in ${Date.now()-r}ms`),t}).catch(t=>{let n=t.response?.headers[`x-github-request-id`]||`UNKNOWN`;throw e.log.error(`${i.method} ${a} - ${t.status} with id ${n} in ${Date.now()-r}ms`),t})})}Oa.VERSION=`6.0.0`;var ka=`0.0.0-development`;function Aa(e){if(!e.data)return{...e,data:[]};if(!((`total_count`in e.data||`total_commits`in e.data)&&!(`url`in e.data)))return e;let t=e.data.incomplete_results,n=e.data.repository_selection,r=e.data.total_count,i=e.data.total_commits;delete e.data.incomplete_results,delete e.data.repository_selection,delete e.data.total_count,delete e.data.total_commits;let a=Object.keys(e.data)[0];return e.data=e.data[a],t!==void 0&&(e.data.incomplete_results=t),n!==void 0&&(e.data.repository_selection=n),e.data.total_count=r,e.data.total_commits=i,e}function ja(e,t,n){let r=typeof t==`function`?t.endpoint(n):e.request.endpoint(t,n),i=typeof t==`function`?t:e.request,a=r.method,o=r.headers,s=r.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!s)return{done:!0};try{let e=Aa(await i({method:a,url:s,headers:o}));if(s=((e.headers.link||``).match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!s&&`total_commits`in e.data){let t=new URL(e.url),n=t.searchParams,r=parseInt(n.get(`page`)||`1`,10);r*parseInt(n.get(`per_page`)||`250`,10)<e.data.total_commits&&(n.set(`page`,String(r+1)),s=t.toString())}return{value:e}}catch(e){if(e.status!==409)throw e;return s=``,{value:{status:200,headers:{},data:[]}}}}})}}function Ma(e,t,n,r){return typeof n==`function`&&(r=n,n=void 0),Na(e,[],ja(e,t,n)[Symbol.asyncIterator](),r)}function Na(e,t,n,r){return n.next().then(i=>{if(i.done)return t;let a=!1;function o(){a=!0}return t=t.concat(r?r(i.value,o):i.value.data),a?t:Na(e,t,n,r)})}Object.assign(Ma,{iterator:ja});function Pa(e){return{paginate:Object.assign(Ma.bind(null,e),{iterator:ja.bind(null,e)})}}Pa.VERSION=ka;var Fa={actions:{addCustomLabelsToSelfHostedRunnerForOrg:[`POST /orgs/{org}/actions/runners/{runner_id}/labels`],addCustomLabelsToSelfHostedRunnerForRepo:[`POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],addRepoAccessToSelfHostedRunnerGroupInOrg:[`PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}`],addSelectedRepoToOrgSecret:[`PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}`],addSelectedRepoToOrgVariable:[`PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}`],approveWorkflowRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve`],cancelWorkflowRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel`],createEnvironmentVariable:[`POST /repos/{owner}/{repo}/environments/{environment_name}/variables`],createHostedRunnerForOrg:[`POST /orgs/{org}/actions/hosted-runners`],createOrUpdateEnvironmentSecret:[`PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}`],createOrUpdateOrgSecret:[`PUT /orgs/{org}/actions/secrets/{secret_name}`],createOrUpdateRepoSecret:[`PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}`],createOrgVariable:[`POST /orgs/{org}/actions/variables`],createRegistrationTokenForOrg:[`POST /orgs/{org}/actions/runners/registration-token`],createRegistrationTokenForRepo:[`POST /repos/{owner}/{repo}/actions/runners/registration-token`],createRemoveTokenForOrg:[`POST /orgs/{org}/actions/runners/remove-token`],createRemoveTokenForRepo:[`POST /repos/{owner}/{repo}/actions/runners/remove-token`],createRepoVariable:[`POST /repos/{owner}/{repo}/actions/variables`],createWorkflowDispatch:[`POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches`],deleteActionsCacheById:[`DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}`],deleteActionsCacheByKey:[`DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}`],deleteArtifact:[`DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}`],deleteCustomImageFromOrg:[`DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}`],deleteCustomImageVersionFromOrg:[`DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}`],deleteEnvironmentSecret:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}`],deleteEnvironmentVariable:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}`],deleteHostedRunnerForOrg:[`DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}`],deleteOrgSecret:[`DELETE /orgs/{org}/actions/secrets/{secret_name}`],deleteOrgVariable:[`DELETE /orgs/{org}/actions/variables/{name}`],deleteRepoSecret:[`DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}`],deleteRepoVariable:[`DELETE /repos/{owner}/{repo}/actions/variables/{name}`],deleteSelfHostedRunnerFromOrg:[`DELETE /orgs/{org}/actions/runners/{runner_id}`],deleteSelfHostedRunnerFromRepo:[`DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}`],deleteWorkflowRun:[`DELETE /repos/{owner}/{repo}/actions/runs/{run_id}`],deleteWorkflowRunLogs:[`DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs`],disableSelectedRepositoryGithubActionsOrganization:[`DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}`],disableWorkflow:[`PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable`],downloadArtifact:[`GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}`],downloadJobLogsForWorkflowRun:[`GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs`],downloadWorkflowRunAttemptLogs:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs`],downloadWorkflowRunLogs:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs`],enableSelectedRepositoryGithubActionsOrganization:[`PUT /orgs/{org}/actions/permissions/repositories/{repository_id}`],enableWorkflow:[`PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable`],forceCancelWorkflowRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel`],generateRunnerJitconfigForOrg:[`POST /orgs/{org}/actions/runners/generate-jitconfig`],generateRunnerJitconfigForRepo:[`POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig`],getActionsCacheList:[`GET /repos/{owner}/{repo}/actions/caches`],getActionsCacheUsage:[`GET /repos/{owner}/{repo}/actions/cache/usage`],getActionsCacheUsageByRepoForOrg:[`GET /orgs/{org}/actions/cache/usage-by-repository`],getActionsCacheUsageForOrg:[`GET /orgs/{org}/actions/cache/usage`],getAllowedActionsOrganization:[`GET /orgs/{org}/actions/permissions/selected-actions`],getAllowedActionsRepository:[`GET /repos/{owner}/{repo}/actions/permissions/selected-actions`],getArtifact:[`GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}`],getCustomImageForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}`],getCustomImageVersionForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}`],getCustomOidcSubClaimForRepo:[`GET /repos/{owner}/{repo}/actions/oidc/customization/sub`],getEnvironmentPublicKey:[`GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key`],getEnvironmentSecret:[`GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}`],getEnvironmentVariable:[`GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}`],getGithubActionsDefaultWorkflowPermissionsOrganization:[`GET /orgs/{org}/actions/permissions/workflow`],getGithubActionsDefaultWorkflowPermissionsRepository:[`GET /repos/{owner}/{repo}/actions/permissions/workflow`],getGithubActionsPermissionsOrganization:[`GET /orgs/{org}/actions/permissions`],getGithubActionsPermissionsRepository:[`GET /repos/{owner}/{repo}/actions/permissions`],getHostedRunnerForOrg:[`GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}`],getHostedRunnersGithubOwnedImagesForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/github-owned`],getHostedRunnersLimitsForOrg:[`GET /orgs/{org}/actions/hosted-runners/limits`],getHostedRunnersMachineSpecsForOrg:[`GET /orgs/{org}/actions/hosted-runners/machine-sizes`],getHostedRunnersPartnerImagesForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/partner`],getHostedRunnersPlatformsForOrg:[`GET /orgs/{org}/actions/hosted-runners/platforms`],getJobForWorkflowRun:[`GET /repos/{owner}/{repo}/actions/jobs/{job_id}`],getOrgPublicKey:[`GET /orgs/{org}/actions/secrets/public-key`],getOrgSecret:[`GET /orgs/{org}/actions/secrets/{secret_name}`],getOrgVariable:[`GET /orgs/{org}/actions/variables/{name}`],getPendingDeploymentsForRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments`],getRepoPermissions:[`GET /repos/{owner}/{repo}/actions/permissions`,{},{renamed:[`actions`,`getGithubActionsPermissionsRepository`]}],getRepoPublicKey:[`GET /repos/{owner}/{repo}/actions/secrets/public-key`],getRepoSecret:[`GET /repos/{owner}/{repo}/actions/secrets/{secret_name}`],getRepoVariable:[`GET /repos/{owner}/{repo}/actions/variables/{name}`],getReviewsForRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals`],getSelfHostedRunnerForOrg:[`GET /orgs/{org}/actions/runners/{runner_id}`],getSelfHostedRunnerForRepo:[`GET /repos/{owner}/{repo}/actions/runners/{runner_id}`],getWorkflow:[`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}`],getWorkflowAccessToRepository:[`GET /repos/{owner}/{repo}/actions/permissions/access`],getWorkflowRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}`],getWorkflowRunAttempt:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}`],getWorkflowRunUsage:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing`],getWorkflowUsage:[`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing`],listArtifactsForRepo:[`GET /repos/{owner}/{repo}/actions/artifacts`],listCustomImageVersionsForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions`],listCustomImagesForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom`],listEnvironmentSecrets:[`GET /repos/{owner}/{repo}/environments/{environment_name}/secrets`],listEnvironmentVariables:[`GET /repos/{owner}/{repo}/environments/{environment_name}/variables`],listGithubHostedRunnersInGroupForOrg:[`GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners`],listHostedRunnersForOrg:[`GET /orgs/{org}/actions/hosted-runners`],listJobsForWorkflowRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs`],listJobsForWorkflowRunAttempt:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs`],listLabelsForSelfHostedRunnerForOrg:[`GET /orgs/{org}/actions/runners/{runner_id}/labels`],listLabelsForSelfHostedRunnerForRepo:[`GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],listOrgSecrets:[`GET /orgs/{org}/actions/secrets`],listOrgVariables:[`GET /orgs/{org}/actions/variables`],listRepoOrganizationSecrets:[`GET /repos/{owner}/{repo}/actions/organization-secrets`],listRepoOrganizationVariables:[`GET /repos/{owner}/{repo}/actions/organization-variables`],listRepoSecrets:[`GET /repos/{owner}/{repo}/actions/secrets`],listRepoVariables:[`GET /repos/{owner}/{repo}/actions/variables`],listRepoWorkflows:[`GET /repos/{owner}/{repo}/actions/workflows`],listRunnerApplicationsForOrg:[`GET /orgs/{org}/actions/runners/downloads`],listRunnerApplicationsForRepo:[`GET /repos/{owner}/{repo}/actions/runners/downloads`],listSelectedReposForOrgSecret:[`GET /orgs/{org}/actions/secrets/{secret_name}/repositories`],listSelectedReposForOrgVariable:[`GET /orgs/{org}/actions/variables/{name}/repositories`],listSelectedRepositoriesEnabledGithubActionsOrganization:[`GET /orgs/{org}/actions/permissions/repositories`],listSelfHostedRunnersForOrg:[`GET /orgs/{org}/actions/runners`],listSelfHostedRunnersForRepo:[`GET /repos/{owner}/{repo}/actions/runners`],listWorkflowRunArtifacts:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts`],listWorkflowRuns:[`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs`],listWorkflowRunsForRepo:[`GET /repos/{owner}/{repo}/actions/runs`],reRunJobForWorkflowRun:[`POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun`],reRunWorkflow:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun`],reRunWorkflowFailedJobs:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs`],removeAllCustomLabelsFromSelfHostedRunnerForOrg:[`DELETE /orgs/{org}/actions/runners/{runner_id}/labels`],removeAllCustomLabelsFromSelfHostedRunnerForRepo:[`DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],removeCustomLabelFromSelfHostedRunnerForOrg:[`DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}`],removeCustomLabelFromSelfHostedRunnerForRepo:[`DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}`],removeSelectedRepoFromOrgSecret:[`DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}`],removeSelectedRepoFromOrgVariable:[`DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}`],reviewCustomGatesForRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule`],reviewPendingDeploymentsForRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments`],setAllowedActionsOrganization:[`PUT /orgs/{org}/actions/permissions/selected-actions`],setAllowedActionsRepository:[`PUT /repos/{owner}/{repo}/actions/permissions/selected-actions`],setCustomLabelsForSelfHostedRunnerForOrg:[`PUT /orgs/{org}/actions/runners/{runner_id}/labels`],setCustomLabelsForSelfHostedRunnerForRepo:[`PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],setCustomOidcSubClaimForRepo:[`PUT /repos/{owner}/{repo}/actions/oidc/customization/sub`],setGithubActionsDefaultWorkflowPermissionsOrganization:[`PUT /orgs/{org}/actions/permissions/workflow`],setGithubActionsDefaultWorkflowPermissionsRepository:[`PUT /repos/{owner}/{repo}/actions/permissions/workflow`],setGithubActionsPermissionsOrganization:[`PUT /orgs/{org}/actions/permissions`],setGithubActionsPermissionsRepository:[`PUT /repos/{owner}/{repo}/actions/permissions`],setSelectedReposForOrgSecret:[`PUT /orgs/{org}/actions/secrets/{secret_name}/repositories`],setSelectedReposForOrgVariable:[`PUT /orgs/{org}/actions/variables/{name}/repositories`],setSelectedRepositoriesEnabledGithubActionsOrganization:[`PUT /orgs/{org}/actions/permissions/repositories`],setWorkflowAccessToRepository:[`PUT /repos/{owner}/{repo}/actions/permissions/access`],updateEnvironmentVariable:[`PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}`],updateHostedRunnerForOrg:[`PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}`],updateOrgVariable:[`PATCH /orgs/{org}/actions/variables/{name}`],updateRepoVariable:[`PATCH /repos/{owner}/{repo}/actions/variables/{name}`]},activity:{checkRepoIsStarredByAuthenticatedUser:[`GET /user/starred/{owner}/{repo}`],deleteRepoSubscription:[`DELETE /repos/{owner}/{repo}/subscription`],deleteThreadSubscription:[`DELETE /notifications/threads/{thread_id}/subscription`],getFeeds:[`GET /feeds`],getRepoSubscription:[`GET /repos/{owner}/{repo}/subscription`],getThread:[`GET /notifications/threads/{thread_id}`],getThreadSubscriptionForAuthenticatedUser:[`GET /notifications/threads/{thread_id}/subscription`],listEventsForAuthenticatedUser:[`GET /users/{username}/events`],listNotificationsForAuthenticatedUser:[`GET /notifications`],listOrgEventsForAuthenticatedUser:[`GET /users/{username}/events/orgs/{org}`],listPublicEvents:[`GET /events`],listPublicEventsForRepoNetwork:[`GET /networks/{owner}/{repo}/events`],listPublicEventsForUser:[`GET /users/{username}/events/public`],listPublicOrgEvents:[`GET /orgs/{org}/events`],listReceivedEventsForUser:[`GET /users/{username}/received_events`],listReceivedPublicEventsForUser:[`GET /users/{username}/received_events/public`],listRepoEvents:[`GET /repos/{owner}/{repo}/events`],listRepoNotificationsForAuthenticatedUser:[`GET /repos/{owner}/{repo}/notifications`],listReposStarredByAuthenticatedUser:[`GET /user/starred`],listReposStarredByUser:[`GET /users/{username}/starred`],listReposWatchedByUser:[`GET /users/{username}/subscriptions`],listStargazersForRepo:[`GET /repos/{owner}/{repo}/stargazers`],listWatchedReposForAuthenticatedUser:[`GET /user/subscriptions`],listWatchersForRepo:[`GET /repos/{owner}/{repo}/subscribers`],markNotificationsAsRead:[`PUT /notifications`],markRepoNotificationsAsRead:[`PUT /repos/{owner}/{repo}/notifications`],markThreadAsDone:[`DELETE /notifications/threads/{thread_id}`],markThreadAsRead:[`PATCH /notifications/threads/{thread_id}`],setRepoSubscription:[`PUT /repos/{owner}/{repo}/subscription`],setThreadSubscription:[`PUT /notifications/threads/{thread_id}/subscription`],starRepoForAuthenticatedUser:[`PUT /user/starred/{owner}/{repo}`],unstarRepoForAuthenticatedUser:[`DELETE /user/starred/{owner}/{repo}`]},apps:{addRepoToInstallation:[`PUT /user/installations/{installation_id}/repositories/{repository_id}`,{},{renamed:[`apps`,`addRepoToInstallationForAuthenticatedUser`]}],addRepoToInstallationForAuthenticatedUser:[`PUT /user/installations/{installation_id}/repositories/{repository_id}`],checkToken:[`POST /applications/{client_id}/token`],createFromManifest:[`POST /app-manifests/{code}/conversions`],createInstallationAccessToken:[`POST /app/installations/{installation_id}/access_tokens`],deleteAuthorization:[`DELETE /applications/{client_id}/grant`],deleteInstallation:[`DELETE /app/installations/{installation_id}`],deleteToken:[`DELETE /applications/{client_id}/token`],getAuthenticated:[`GET /app`],getBySlug:[`GET /apps/{app_slug}`],getInstallation:[`GET /app/installations/{installation_id}`],getOrgInstallation:[`GET /orgs/{org}/installation`],getRepoInstallation:[`GET /repos/{owner}/{repo}/installation`],getSubscriptionPlanForAccount:[`GET /marketplace_listing/accounts/{account_id}`],getSubscriptionPlanForAccountStubbed:[`GET /marketplace_listing/stubbed/accounts/{account_id}`],getUserInstallation:[`GET /users/{username}/installation`],getWebhookConfigForApp:[`GET /app/hook/config`],getWebhookDelivery:[`GET /app/hook/deliveries/{delivery_id}`],listAccountsForPlan:[`GET /marketplace_listing/plans/{plan_id}/accounts`],listAccountsForPlanStubbed:[`GET /marketplace_listing/stubbed/plans/{plan_id}/accounts`],listInstallationReposForAuthenticatedUser:[`GET /user/installations/{installation_id}/repositories`],listInstallationRequestsForAuthenticatedApp:[`GET /app/installation-requests`],listInstallations:[`GET /app/installations`],listInstallationsForAuthenticatedUser:[`GET /user/installations`],listPlans:[`GET /marketplace_listing/plans`],listPlansStubbed:[`GET /marketplace_listing/stubbed/plans`],listReposAccessibleToInstallation:[`GET /installation/repositories`],listSubscriptionsForAuthenticatedUser:[`GET /user/marketplace_purchases`],listSubscriptionsForAuthenticatedUserStubbed:[`GET /user/marketplace_purchases/stubbed`],listWebhookDeliveries:[`GET /app/hook/deliveries`],redeliverWebhookDelivery:[`POST /app/hook/deliveries/{delivery_id}/attempts`],removeRepoFromInstallation:[`DELETE /user/installations/{installation_id}/repositories/{repository_id}`,{},{renamed:[`apps`,`removeRepoFromInstallationForAuthenticatedUser`]}],removeRepoFromInstallationForAuthenticatedUser:[`DELETE /user/installations/{installation_id}/repositories/{repository_id}`],resetToken:[`PATCH /applications/{client_id}/token`],revokeInstallationAccessToken:[`DELETE /installation/token`],scopeToken:[`POST /applications/{client_id}/token/scoped`],suspendInstallation:[`PUT /app/installations/{installation_id}/suspended`],unsuspendInstallation:[`DELETE /app/installations/{installation_id}/suspended`],updateWebhookConfigForApp:[`PATCH /app/hook/config`]},billing:{getGithubActionsBillingOrg:[`GET /orgs/{org}/settings/billing/actions`],getGithubActionsBillingUser:[`GET /users/{username}/settings/billing/actions`],getGithubBillingPremiumRequestUsageReportOrg:[`GET /organizations/{org}/settings/billing/premium_request/usage`],getGithubBillingPremiumRequestUsageReportUser:[`GET /users/{username}/settings/billing/premium_request/usage`],getGithubBillingUsageReportOrg:[`GET /organizations/{org}/settings/billing/usage`],getGithubBillingUsageReportUser:[`GET /users/{username}/settings/billing/usage`],getGithubPackagesBillingOrg:[`GET /orgs/{org}/settings/billing/packages`],getGithubPackagesBillingUser:[`GET /users/{username}/settings/billing/packages`],getSharedStorageBillingOrg:[`GET /orgs/{org}/settings/billing/shared-storage`],getSharedStorageBillingUser:[`GET /users/{username}/settings/billing/shared-storage`]},campaigns:{createCampaign:[`POST /orgs/{org}/campaigns`],deleteCampaign:[`DELETE /orgs/{org}/campaigns/{campaign_number}`],getCampaignSummary:[`GET /orgs/{org}/campaigns/{campaign_number}`],listOrgCampaigns:[`GET /orgs/{org}/campaigns`],updateCampaign:[`PATCH /orgs/{org}/campaigns/{campaign_number}`]},checks:{create:[`POST /repos/{owner}/{repo}/check-runs`],createSuite:[`POST /repos/{owner}/{repo}/check-suites`],get:[`GET /repos/{owner}/{repo}/check-runs/{check_run_id}`],getSuite:[`GET /repos/{owner}/{repo}/check-suites/{check_suite_id}`],listAnnotations:[`GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations`],listForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/check-runs`],listForSuite:[`GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs`],listSuitesForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/check-suites`],rerequestRun:[`POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest`],rerequestSuite:[`POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest`],setSuitesPreferences:[`PATCH /repos/{owner}/{repo}/check-suites/preferences`],update:[`PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}`]},codeScanning:{commitAutofix:[`POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits`],createAutofix:[`POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix`],createVariantAnalysis:[`POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses`],deleteAnalysis:[`DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}`],deleteCodeqlDatabase:[`DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}`],getAlert:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}`,{},{renamedParameters:{alert_id:`alert_number`}}],getAnalysis:[`GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}`],getAutofix:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix`],getCodeqlDatabase:[`GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}`],getDefaultSetup:[`GET /repos/{owner}/{repo}/code-scanning/default-setup`],getSarif:[`GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}`],getVariantAnalysis:[`GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}`],getVariantAnalysisRepoTask:[`GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}`],listAlertInstances:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances`],listAlertsForOrg:[`GET /orgs/{org}/code-scanning/alerts`],listAlertsForRepo:[`GET /repos/{owner}/{repo}/code-scanning/alerts`],listAlertsInstances:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances`,{},{renamed:[`codeScanning`,`listAlertInstances`]}],listCodeqlDatabases:[`GET /repos/{owner}/{repo}/code-scanning/codeql/databases`],listRecentAnalyses:[`GET /repos/{owner}/{repo}/code-scanning/analyses`],updateAlert:[`PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}`],updateDefaultSetup:[`PATCH /repos/{owner}/{repo}/code-scanning/default-setup`],uploadSarif:[`POST /repos/{owner}/{repo}/code-scanning/sarifs`]},codeSecurity:{attachConfiguration:[`POST /orgs/{org}/code-security/configurations/{configuration_id}/attach`],attachEnterpriseConfiguration:[`POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach`],createConfiguration:[`POST /orgs/{org}/code-security/configurations`],createConfigurationForEnterprise:[`POST /enterprises/{enterprise}/code-security/configurations`],deleteConfiguration:[`DELETE /orgs/{org}/code-security/configurations/{configuration_id}`],deleteConfigurationForEnterprise:[`DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}`],detachConfiguration:[`DELETE /orgs/{org}/code-security/configurations/detach`],getConfiguration:[`GET /orgs/{org}/code-security/configurations/{configuration_id}`],getConfigurationForRepository:[`GET /repos/{owner}/{repo}/code-security-configuration`],getConfigurationsForEnterprise:[`GET /enterprises/{enterprise}/code-security/configurations`],getConfigurationsForOrg:[`GET /orgs/{org}/code-security/configurations`],getDefaultConfigurations:[`GET /orgs/{org}/code-security/configurations/defaults`],getDefaultConfigurationsForEnterprise:[`GET /enterprises/{enterprise}/code-security/configurations/defaults`],getRepositoriesForConfiguration:[`GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories`],getRepositoriesForEnterpriseConfiguration:[`GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories`],getSingleConfigurationForEnterprise:[`GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}`],setConfigurationAsDefault:[`PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults`],setConfigurationAsDefaultForEnterprise:[`PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults`],updateConfiguration:[`PATCH /orgs/{org}/code-security/configurations/{configuration_id}`],updateEnterpriseConfiguration:[`PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}`]},codesOfConduct:{getAllCodesOfConduct:[`GET /codes_of_conduct`],getConductCode:[`GET /codes_of_conduct/{key}`]},codespaces:{addRepositoryForSecretForAuthenticatedUser:[`PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}`],addSelectedRepoToOrgSecret:[`PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}`],checkPermissionsForDevcontainer:[`GET /repos/{owner}/{repo}/codespaces/permissions_check`],codespaceMachinesForAuthenticatedUser:[`GET /user/codespaces/{codespace_name}/machines`],createForAuthenticatedUser:[`POST /user/codespaces`],createOrUpdateOrgSecret:[`PUT /orgs/{org}/codespaces/secrets/{secret_name}`],createOrUpdateRepoSecret:[`PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}`],createOrUpdateSecretForAuthenticatedUser:[`PUT /user/codespaces/secrets/{secret_name}`],createWithPrForAuthenticatedUser:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces`],createWithRepoForAuthenticatedUser:[`POST /repos/{owner}/{repo}/codespaces`],deleteForAuthenticatedUser:[`DELETE /user/codespaces/{codespace_name}`],deleteFromOrganization:[`DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}`],deleteOrgSecret:[`DELETE /orgs/{org}/codespaces/secrets/{secret_name}`],deleteRepoSecret:[`DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}`],deleteSecretForAuthenticatedUser:[`DELETE /user/codespaces/secrets/{secret_name}`],exportForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/exports`],getCodespacesForUserInOrg:[`GET /orgs/{org}/members/{username}/codespaces`],getExportDetailsForAuthenticatedUser:[`GET /user/codespaces/{codespace_name}/exports/{export_id}`],getForAuthenticatedUser:[`GET /user/codespaces/{codespace_name}`],getOrgPublicKey:[`GET /orgs/{org}/codespaces/secrets/public-key`],getOrgSecret:[`GET /orgs/{org}/codespaces/secrets/{secret_name}`],getPublicKeyForAuthenticatedUser:[`GET /user/codespaces/secrets/public-key`],getRepoPublicKey:[`GET /repos/{owner}/{repo}/codespaces/secrets/public-key`],getRepoSecret:[`GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}`],getSecretForAuthenticatedUser:[`GET /user/codespaces/secrets/{secret_name}`],listDevcontainersInRepositoryForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces/devcontainers`],listForAuthenticatedUser:[`GET /user/codespaces`],listInOrganization:[`GET /orgs/{org}/codespaces`,{},{renamedParameters:{org_id:`org`}}],listInRepositoryForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces`],listOrgSecrets:[`GET /orgs/{org}/codespaces/secrets`],listRepoSecrets:[`GET /repos/{owner}/{repo}/codespaces/secrets`],listRepositoriesForSecretForAuthenticatedUser:[`GET /user/codespaces/secrets/{secret_name}/repositories`],listSecretsForAuthenticatedUser:[`GET /user/codespaces/secrets`],listSelectedReposForOrgSecret:[`GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories`],preFlightWithRepoForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces/new`],publishForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/publish`],removeRepositoryForSecretForAuthenticatedUser:[`DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}`],removeSelectedRepoFromOrgSecret:[`DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}`],repoMachinesForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces/machines`],setRepositoriesForSecretForAuthenticatedUser:[`PUT /user/codespaces/secrets/{secret_name}/repositories`],setSelectedReposForOrgSecret:[`PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories`],startForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/start`],stopForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/stop`],stopInOrganization:[`POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop`],updateForAuthenticatedUser:[`PATCH /user/codespaces/{codespace_name}`]},copilot:{addCopilotSeatsForTeams:[`POST /orgs/{org}/copilot/billing/selected_teams`],addCopilotSeatsForUsers:[`POST /orgs/{org}/copilot/billing/selected_users`],cancelCopilotSeatAssignmentForTeams:[`DELETE /orgs/{org}/copilot/billing/selected_teams`],cancelCopilotSeatAssignmentForUsers:[`DELETE /orgs/{org}/copilot/billing/selected_users`],copilotMetricsForOrganization:[`GET /orgs/{org}/copilot/metrics`],copilotMetricsForTeam:[`GET /orgs/{org}/team/{team_slug}/copilot/metrics`],getCopilotOrganizationDetails:[`GET /orgs/{org}/copilot/billing`],getCopilotSeatDetailsForUser:[`GET /orgs/{org}/members/{username}/copilot`],listCopilotSeats:[`GET /orgs/{org}/copilot/billing/seats`]},credentials:{revoke:[`POST /credentials/revoke`]},dependabot:{addSelectedRepoToOrgSecret:[`PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}`],createOrUpdateOrgSecret:[`PUT /orgs/{org}/dependabot/secrets/{secret_name}`],createOrUpdateRepoSecret:[`PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}`],deleteOrgSecret:[`DELETE /orgs/{org}/dependabot/secrets/{secret_name}`],deleteRepoSecret:[`DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}`],getAlert:[`GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}`],getOrgPublicKey:[`GET /orgs/{org}/dependabot/secrets/public-key`],getOrgSecret:[`GET /orgs/{org}/dependabot/secrets/{secret_name}`],getRepoPublicKey:[`GET /repos/{owner}/{repo}/dependabot/secrets/public-key`],getRepoSecret:[`GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}`],listAlertsForEnterprise:[`GET /enterprises/{enterprise}/dependabot/alerts`],listAlertsForOrg:[`GET /orgs/{org}/dependabot/alerts`],listAlertsForRepo:[`GET /repos/{owner}/{repo}/dependabot/alerts`],listOrgSecrets:[`GET /orgs/{org}/dependabot/secrets`],listRepoSecrets:[`GET /repos/{owner}/{repo}/dependabot/secrets`],listSelectedReposForOrgSecret:[`GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories`],removeSelectedRepoFromOrgSecret:[`DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}`],repositoryAccessForOrg:[`GET /organizations/{org}/dependabot/repository-access`],setRepositoryAccessDefaultLevel:[`PUT /organizations/{org}/dependabot/repository-access/default-level`],setSelectedReposForOrgSecret:[`PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories`],updateAlert:[`PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}`],updateRepositoryAccessForOrg:[`PATCH /organizations/{org}/dependabot/repository-access`]},dependencyGraph:{createRepositorySnapshot:[`POST /repos/{owner}/{repo}/dependency-graph/snapshots`],diffRange:[`GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}`],exportSbom:[`GET /repos/{owner}/{repo}/dependency-graph/sbom`]},emojis:{get:[`GET /emojis`]},enterpriseTeamMemberships:{add:[`PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}`],bulkAdd:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add`],bulkRemove:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove`],get:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}`],list:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships`],remove:[`DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}`]},enterpriseTeamOrganizations:{add:[`PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}`],bulkAdd:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add`],bulkRemove:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove`],delete:[`DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}`],getAssignment:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}`],getAssignments:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations`]},enterpriseTeams:{create:[`POST /enterprises/{enterprise}/teams`],delete:[`DELETE /enterprises/{enterprise}/teams/{team_slug}`],get:[`GET /enterprises/{enterprise}/teams/{team_slug}`],list:[`GET /enterprises/{enterprise}/teams`],update:[`PATCH /enterprises/{enterprise}/teams/{team_slug}`]},gists:{checkIsStarred:[`GET /gists/{gist_id}/star`],create:[`POST /gists`],createComment:[`POST /gists/{gist_id}/comments`],delete:[`DELETE /gists/{gist_id}`],deleteComment:[`DELETE /gists/{gist_id}/comments/{comment_id}`],fork:[`POST /gists/{gist_id}/forks`],get:[`GET /gists/{gist_id}`],getComment:[`GET /gists/{gist_id}/comments/{comment_id}`],getRevision:[`GET /gists/{gist_id}/{sha}`],list:[`GET /gists`],listComments:[`GET /gists/{gist_id}/comments`],listCommits:[`GET /gists/{gist_id}/commits`],listForUser:[`GET /users/{username}/gists`],listForks:[`GET /gists/{gist_id}/forks`],listPublic:[`GET /gists/public`],listStarred:[`GET /gists/starred`],star:[`PUT /gists/{gist_id}/star`],unstar:[`DELETE /gists/{gist_id}/star`],update:[`PATCH /gists/{gist_id}`],updateComment:[`PATCH /gists/{gist_id}/comments/{comment_id}`]},git:{createBlob:[`POST /repos/{owner}/{repo}/git/blobs`],createCommit:[`POST /repos/{owner}/{repo}/git/commits`],createRef:[`POST /repos/{owner}/{repo}/git/refs`],createTag:[`POST /repos/{owner}/{repo}/git/tags`],createTree:[`POST /repos/{owner}/{repo}/git/trees`],deleteRef:[`DELETE /repos/{owner}/{repo}/git/refs/{ref}`],getBlob:[`GET /repos/{owner}/{repo}/git/blobs/{file_sha}`],getCommit:[`GET /repos/{owner}/{repo}/git/commits/{commit_sha}`],getRef:[`GET /repos/{owner}/{repo}/git/ref/{ref}`],getTag:[`GET /repos/{owner}/{repo}/git/tags/{tag_sha}`],getTree:[`GET /repos/{owner}/{repo}/git/trees/{tree_sha}`],listMatchingRefs:[`GET /repos/{owner}/{repo}/git/matching-refs/{ref}`],updateRef:[`PATCH /repos/{owner}/{repo}/git/refs/{ref}`]},gitignore:{getAllTemplates:[`GET /gitignore/templates`],getTemplate:[`GET /gitignore/templates/{name}`]},hostedCompute:{createNetworkConfigurationForOrg:[`POST /orgs/{org}/settings/network-configurations`],deleteNetworkConfigurationFromOrg:[`DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}`],getNetworkConfigurationForOrg:[`GET /orgs/{org}/settings/network-configurations/{network_configuration_id}`],getNetworkSettingsForOrg:[`GET /orgs/{org}/settings/network-settings/{network_settings_id}`],listNetworkConfigurationsForOrg:[`GET /orgs/{org}/settings/network-configurations`],updateNetworkConfigurationForOrg:[`PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}`]},interactions:{getRestrictionsForAuthenticatedUser:[`GET /user/interaction-limits`],getRestrictionsForOrg:[`GET /orgs/{org}/interaction-limits`],getRestrictionsForRepo:[`GET /repos/{owner}/{repo}/interaction-limits`],getRestrictionsForYourPublicRepos:[`GET /user/interaction-limits`,{},{renamed:[`interactions`,`getRestrictionsForAuthenticatedUser`]}],removeRestrictionsForAuthenticatedUser:[`DELETE /user/interaction-limits`],removeRestrictionsForOrg:[`DELETE /orgs/{org}/interaction-limits`],removeRestrictionsForRepo:[`DELETE /repos/{owner}/{repo}/interaction-limits`],removeRestrictionsForYourPublicRepos:[`DELETE /user/interaction-limits`,{},{renamed:[`interactions`,`removeRestrictionsForAuthenticatedUser`]}],setRestrictionsForAuthenticatedUser:[`PUT /user/interaction-limits`],setRestrictionsForOrg:[`PUT /orgs/{org}/interaction-limits`],setRestrictionsForRepo:[`PUT /repos/{owner}/{repo}/interaction-limits`],setRestrictionsForYourPublicRepos:[`PUT /user/interaction-limits`,{},{renamed:[`interactions`,`setRestrictionsForAuthenticatedUser`]}]},issues:{addAssignees:[`POST /repos/{owner}/{repo}/issues/{issue_number}/assignees`],addBlockedByDependency:[`POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by`],addLabels:[`POST /repos/{owner}/{repo}/issues/{issue_number}/labels`],addSubIssue:[`POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues`],checkUserCanBeAssigned:[`GET /repos/{owner}/{repo}/assignees/{assignee}`],checkUserCanBeAssignedToIssue:[`GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}`],create:[`POST /repos/{owner}/{repo}/issues`],createComment:[`POST /repos/{owner}/{repo}/issues/{issue_number}/comments`],createLabel:[`POST /repos/{owner}/{repo}/labels`],createMilestone:[`POST /repos/{owner}/{repo}/milestones`],deleteComment:[`DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}`],deleteLabel:[`DELETE /repos/{owner}/{repo}/labels/{name}`],deleteMilestone:[`DELETE /repos/{owner}/{repo}/milestones/{milestone_number}`],get:[`GET /repos/{owner}/{repo}/issues/{issue_number}`],getComment:[`GET /repos/{owner}/{repo}/issues/comments/{comment_id}`],getEvent:[`GET /repos/{owner}/{repo}/issues/events/{event_id}`],getLabel:[`GET /repos/{owner}/{repo}/labels/{name}`],getMilestone:[`GET /repos/{owner}/{repo}/milestones/{milestone_number}`],getParent:[`GET /repos/{owner}/{repo}/issues/{issue_number}/parent`],list:[`GET /issues`],listAssignees:[`GET /repos/{owner}/{repo}/assignees`],listComments:[`GET /repos/{owner}/{repo}/issues/{issue_number}/comments`],listCommentsForRepo:[`GET /repos/{owner}/{repo}/issues/comments`],listDependenciesBlockedBy:[`GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by`],listDependenciesBlocking:[`GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking`],listEvents:[`GET /repos/{owner}/{repo}/issues/{issue_number}/events`],listEventsForRepo:[`GET /repos/{owner}/{repo}/issues/events`],listEventsForTimeline:[`GET /repos/{owner}/{repo}/issues/{issue_number}/timeline`],listForAuthenticatedUser:[`GET /user/issues`],listForOrg:[`GET /orgs/{org}/issues`],listForRepo:[`GET /repos/{owner}/{repo}/issues`],listLabelsForMilestone:[`GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels`],listLabelsForRepo:[`GET /repos/{owner}/{repo}/labels`],listLabelsOnIssue:[`GET /repos/{owner}/{repo}/issues/{issue_number}/labels`],listMilestones:[`GET /repos/{owner}/{repo}/milestones`],listSubIssues:[`GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues`],lock:[`PUT /repos/{owner}/{repo}/issues/{issue_number}/lock`],removeAllLabels:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels`],removeAssignees:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees`],removeDependencyBlockedBy:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}`],removeLabel:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}`],removeSubIssue:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue`],reprioritizeSubIssue:[`PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority`],setLabels:[`PUT /repos/{owner}/{repo}/issues/{issue_number}/labels`],unlock:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock`],update:[`PATCH /repos/{owner}/{repo}/issues/{issue_number}`],updateComment:[`PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}`],updateLabel:[`PATCH /repos/{owner}/{repo}/labels/{name}`],updateMilestone:[`PATCH /repos/{owner}/{repo}/milestones/{milestone_number}`]},licenses:{get:[`GET /licenses/{license}`],getAllCommonlyUsed:[`GET /licenses`],getForRepo:[`GET /repos/{owner}/{repo}/license`]},markdown:{render:[`POST /markdown`],renderRaw:[`POST /markdown/raw`,{headers:{"content-type":`text/plain; charset=utf-8`}}]},meta:{get:[`GET /meta`],getAllVersions:[`GET /versions`],getOctocat:[`GET /octocat`],getZen:[`GET /zen`],root:[`GET /`]},migrations:{deleteArchiveForAuthenticatedUser:[`DELETE /user/migrations/{migration_id}/archive`],deleteArchiveForOrg:[`DELETE /orgs/{org}/migrations/{migration_id}/archive`],downloadArchiveForOrg:[`GET /orgs/{org}/migrations/{migration_id}/archive`],getArchiveForAuthenticatedUser:[`GET /user/migrations/{migration_id}/archive`],getStatusForAuthenticatedUser:[`GET /user/migrations/{migration_id}`],getStatusForOrg:[`GET /orgs/{org}/migrations/{migration_id}`],listForAuthenticatedUser:[`GET /user/migrations`],listForOrg:[`GET /orgs/{org}/migrations`],listReposForAuthenticatedUser:[`GET /user/migrations/{migration_id}/repositories`],listReposForOrg:[`GET /orgs/{org}/migrations/{migration_id}/repositories`],listReposForUser:[`GET /user/migrations/{migration_id}/repositories`,{},{renamed:[`migrations`,`listReposForAuthenticatedUser`]}],startForAuthenticatedUser:[`POST /user/migrations`],startForOrg:[`POST /orgs/{org}/migrations`],unlockRepoForAuthenticatedUser:[`DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock`],unlockRepoForOrg:[`DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock`]},oidc:{getOidcCustomSubTemplateForOrg:[`GET /orgs/{org}/actions/oidc/customization/sub`],updateOidcCustomSubTemplateForOrg:[`PUT /orgs/{org}/actions/oidc/customization/sub`]},orgs:{addSecurityManagerTeam:[`PUT /orgs/{org}/security-managers/teams/{team_slug}`,{},{deprecated:`octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team`}],assignTeamToOrgRole:[`PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}`],assignUserToOrgRole:[`PUT /orgs/{org}/organization-roles/users/{username}/{role_id}`],blockUser:[`PUT /orgs/{org}/blocks/{username}`],cancelInvitation:[`DELETE /orgs/{org}/invitations/{invitation_id}`],checkBlockedUser:[`GET /orgs/{org}/blocks/{username}`],checkMembershipForUser:[`GET /orgs/{org}/members/{username}`],checkPublicMembershipForUser:[`GET /orgs/{org}/public_members/{username}`],convertMemberToOutsideCollaborator:[`PUT /orgs/{org}/outside_collaborators/{username}`],createArtifactStorageRecord:[`POST /orgs/{org}/artifacts/metadata/storage-record`],createInvitation:[`POST /orgs/{org}/invitations`],createIssueType:[`POST /orgs/{org}/issue-types`],createWebhook:[`POST /orgs/{org}/hooks`],customPropertiesForOrgsCreateOrUpdateOrganizationValues:[`PATCH /organizations/{org}/org-properties/values`],customPropertiesForOrgsGetOrganizationValues:[`GET /organizations/{org}/org-properties/values`],customPropertiesForReposCreateOrUpdateOrganizationDefinition:[`PUT /orgs/{org}/properties/schema/{custom_property_name}`],customPropertiesForReposCreateOrUpdateOrganizationDefinitions:[`PATCH /orgs/{org}/properties/schema`],customPropertiesForReposCreateOrUpdateOrganizationValues:[`PATCH /orgs/{org}/properties/values`],customPropertiesForReposDeleteOrganizationDefinition:[`DELETE /orgs/{org}/properties/schema/{custom_property_name}`],customPropertiesForReposGetOrganizationDefinition:[`GET /orgs/{org}/properties/schema/{custom_property_name}`],customPropertiesForReposGetOrganizationDefinitions:[`GET /orgs/{org}/properties/schema`],customPropertiesForReposGetOrganizationValues:[`GET /orgs/{org}/properties/values`],delete:[`DELETE /orgs/{org}`],deleteAttestationsBulk:[`POST /orgs/{org}/attestations/delete-request`],deleteAttestationsById:[`DELETE /orgs/{org}/attestations/{attestation_id}`],deleteAttestationsBySubjectDigest:[`DELETE /orgs/{org}/attestations/digest/{subject_digest}`],deleteIssueType:[`DELETE /orgs/{org}/issue-types/{issue_type_id}`],deleteWebhook:[`DELETE /orgs/{org}/hooks/{hook_id}`],disableSelectedRepositoryImmutableReleasesOrganization:[`DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}`],enableSelectedRepositoryImmutableReleasesOrganization:[`PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}`],get:[`GET /orgs/{org}`],getImmutableReleasesSettings:[`GET /orgs/{org}/settings/immutable-releases`],getImmutableReleasesSettingsRepositories:[`GET /orgs/{org}/settings/immutable-releases/repositories`],getMembershipForAuthenticatedUser:[`GET /user/memberships/orgs/{org}`],getMembershipForUser:[`GET /orgs/{org}/memberships/{username}`],getOrgRole:[`GET /orgs/{org}/organization-roles/{role_id}`],getOrgRulesetHistory:[`GET /orgs/{org}/rulesets/{ruleset_id}/history`],getOrgRulesetVersion:[`GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}`],getWebhook:[`GET /orgs/{org}/hooks/{hook_id}`],getWebhookConfigForOrg:[`GET /orgs/{org}/hooks/{hook_id}/config`],getWebhookDelivery:[`GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}`],list:[`GET /organizations`],listAppInstallations:[`GET /orgs/{org}/installations`],listArtifactStorageRecords:[`GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records`],listAttestationRepositories:[`GET /orgs/{org}/attestations/repositories`],listAttestations:[`GET /orgs/{org}/attestations/{subject_digest}`],listAttestationsBulk:[`POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}`],listBlockedUsers:[`GET /orgs/{org}/blocks`],listFailedInvitations:[`GET /orgs/{org}/failed_invitations`],listForAuthenticatedUser:[`GET /user/orgs`],listForUser:[`GET /users/{username}/orgs`],listInvitationTeams:[`GET /orgs/{org}/invitations/{invitation_id}/teams`],listIssueTypes:[`GET /orgs/{org}/issue-types`],listMembers:[`GET /orgs/{org}/members`],listMembershipsForAuthenticatedUser:[`GET /user/memberships/orgs`],listOrgRoleTeams:[`GET /orgs/{org}/organization-roles/{role_id}/teams`],listOrgRoleUsers:[`GET /orgs/{org}/organization-roles/{role_id}/users`],listOrgRoles:[`GET /orgs/{org}/organization-roles`],listOrganizationFineGrainedPermissions:[`GET /orgs/{org}/organization-fine-grained-permissions`],listOutsideCollaborators:[`GET /orgs/{org}/outside_collaborators`],listPatGrantRepositories:[`GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories`],listPatGrantRequestRepositories:[`GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories`],listPatGrantRequests:[`GET /orgs/{org}/personal-access-token-requests`],listPatGrants:[`GET /orgs/{org}/personal-access-tokens`],listPendingInvitations:[`GET /orgs/{org}/invitations`],listPublicMembers:[`GET /orgs/{org}/public_members`],listSecurityManagerTeams:[`GET /orgs/{org}/security-managers`,{},{deprecated:`octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams`}],listWebhookDeliveries:[`GET /orgs/{org}/hooks/{hook_id}/deliveries`],listWebhooks:[`GET /orgs/{org}/hooks`],pingWebhook:[`POST /orgs/{org}/hooks/{hook_id}/pings`],redeliverWebhookDelivery:[`POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts`],removeMember:[`DELETE /orgs/{org}/members/{username}`],removeMembershipForUser:[`DELETE /orgs/{org}/memberships/{username}`],removeOutsideCollaborator:[`DELETE /orgs/{org}/outside_collaborators/{username}`],removePublicMembershipForAuthenticatedUser:[`DELETE /orgs/{org}/public_members/{username}`],removeSecurityManagerTeam:[`DELETE /orgs/{org}/security-managers/teams/{team_slug}`,{},{deprecated:`octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team`}],reviewPatGrantRequest:[`POST /orgs/{org}/personal-access-token-requests/{pat_request_id}`],reviewPatGrantRequestsInBulk:[`POST /orgs/{org}/personal-access-token-requests`],revokeAllOrgRolesTeam:[`DELETE /orgs/{org}/organization-roles/teams/{team_slug}`],revokeAllOrgRolesUser:[`DELETE /orgs/{org}/organization-roles/users/{username}`],revokeOrgRoleTeam:[`DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}`],revokeOrgRoleUser:[`DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}`],setImmutableReleasesSettings:[`PUT /orgs/{org}/settings/immutable-releases`],setImmutableReleasesSettingsRepositories:[`PUT /orgs/{org}/settings/immutable-releases/repositories`],setMembershipForUser:[`PUT /orgs/{org}/memberships/{username}`],setPublicMembershipForAuthenticatedUser:[`PUT /orgs/{org}/public_members/{username}`],unblockUser:[`DELETE /orgs/{org}/blocks/{username}`],update:[`PATCH /orgs/{org}`],updateIssueType:[`PUT /orgs/{org}/issue-types/{issue_type_id}`],updateMembershipForAuthenticatedUser:[`PATCH /user/memberships/orgs/{org}`],updatePatAccess:[`POST /orgs/{org}/personal-access-tokens/{pat_id}`],updatePatAccesses:[`POST /orgs/{org}/personal-access-tokens`],updateWebhook:[`PATCH /orgs/{org}/hooks/{hook_id}`],updateWebhookConfigForOrg:[`PATCH /orgs/{org}/hooks/{hook_id}/config`]},packages:{deletePackageForAuthenticatedUser:[`DELETE /user/packages/{package_type}/{package_name}`],deletePackageForOrg:[`DELETE /orgs/{org}/packages/{package_type}/{package_name}`],deletePackageForUser:[`DELETE /users/{username}/packages/{package_type}/{package_name}`],deletePackageVersionForAuthenticatedUser:[`DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}`],deletePackageVersionForOrg:[`DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}`],deletePackageVersionForUser:[`DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}`],getAllPackageVersionsForAPackageOwnedByAnOrg:[`GET /orgs/{org}/packages/{package_type}/{package_name}/versions`,{},{renamed:[`packages`,`getAllPackageVersionsForPackageOwnedByOrg`]}],getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}/versions`,{},{renamed:[`packages`,`getAllPackageVersionsForPackageOwnedByAuthenticatedUser`]}],getAllPackageVersionsForPackageOwnedByAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}/versions`],getAllPackageVersionsForPackageOwnedByOrg:[`GET /orgs/{org}/packages/{package_type}/{package_name}/versions`],getAllPackageVersionsForPackageOwnedByUser:[`GET /users/{username}/packages/{package_type}/{package_name}/versions`],getPackageForAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}`],getPackageForOrganization:[`GET /orgs/{org}/packages/{package_type}/{package_name}`],getPackageForUser:[`GET /users/{username}/packages/{package_type}/{package_name}`],getPackageVersionForAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}`],getPackageVersionForOrganization:[`GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}`],getPackageVersionForUser:[`GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}`],listDockerMigrationConflictingPackagesForAuthenticatedUser:[`GET /user/docker/conflicts`],listDockerMigrationConflictingPackagesForOrganization:[`GET /orgs/{org}/docker/conflicts`],listDockerMigrationConflictingPackagesForUser:[`GET /users/{username}/docker/conflicts`],listPackagesForAuthenticatedUser:[`GET /user/packages`],listPackagesForOrganization:[`GET /orgs/{org}/packages`],listPackagesForUser:[`GET /users/{username}/packages`],restorePackageForAuthenticatedUser:[`POST /user/packages/{package_type}/{package_name}/restore{?token}`],restorePackageForOrg:[`POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}`],restorePackageForUser:[`POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}`],restorePackageVersionForAuthenticatedUser:[`POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore`],restorePackageVersionForOrg:[`POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore`],restorePackageVersionForUser:[`POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore`]},privateRegistries:{createOrgPrivateRegistry:[`POST /orgs/{org}/private-registries`],deleteOrgPrivateRegistry:[`DELETE /orgs/{org}/private-registries/{secret_name}`],getOrgPrivateRegistry:[`GET /orgs/{org}/private-registries/{secret_name}`],getOrgPublicKey:[`GET /orgs/{org}/private-registries/public-key`],listOrgPrivateRegistries:[`GET /orgs/{org}/private-registries`],updateOrgPrivateRegistry:[`PATCH /orgs/{org}/private-registries/{secret_name}`]},projects:{addItemForOrg:[`POST /orgs/{org}/projectsV2/{project_number}/items`],addItemForUser:[`POST /users/{username}/projectsV2/{project_number}/items`],deleteItemForOrg:[`DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}`],deleteItemForUser:[`DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}`],getFieldForOrg:[`GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}`],getFieldForUser:[`GET /users/{username}/projectsV2/{project_number}/fields/{field_id}`],getForOrg:[`GET /orgs/{org}/projectsV2/{project_number}`],getForUser:[`GET /users/{username}/projectsV2/{project_number}`],getOrgItem:[`GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}`],getUserItem:[`GET /users/{username}/projectsV2/{project_number}/items/{item_id}`],listFieldsForOrg:[`GET /orgs/{org}/projectsV2/{project_number}/fields`],listFieldsForUser:[`GET /users/{username}/projectsV2/{project_number}/fields`],listForOrg:[`GET /orgs/{org}/projectsV2`],listForUser:[`GET /users/{username}/projectsV2`],listItemsForOrg:[`GET /orgs/{org}/projectsV2/{project_number}/items`],listItemsForUser:[`GET /users/{username}/projectsV2/{project_number}/items`],updateItemForOrg:[`PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}`],updateItemForUser:[`PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}`]},pulls:{checkIfMerged:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/merge`],create:[`POST /repos/{owner}/{repo}/pulls`],createReplyForReviewComment:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies`],createReview:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews`],createReviewComment:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/comments`],deletePendingReview:[`DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}`],deleteReviewComment:[`DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}`],dismissReview:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals`],get:[`GET /repos/{owner}/{repo}/pulls/{pull_number}`],getReview:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}`],getReviewComment:[`GET /repos/{owner}/{repo}/pulls/comments/{comment_id}`],list:[`GET /repos/{owner}/{repo}/pulls`],listCommentsForReview:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments`],listCommits:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/commits`],listFiles:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/files`],listRequestedReviewers:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`],listReviewComments:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/comments`],listReviewCommentsForRepo:[`GET /repos/{owner}/{repo}/pulls/comments`],listReviews:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews`],merge:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge`],removeRequestedReviewers:[`DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`],requestReviewers:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`],submitReview:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events`],update:[`PATCH /repos/{owner}/{repo}/pulls/{pull_number}`],updateBranch:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch`],updateReview:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}`],updateReviewComment:[`PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}`]},rateLimit:{get:[`GET /rate_limit`]},reactions:{createForCommitComment:[`POST /repos/{owner}/{repo}/comments/{comment_id}/reactions`],createForIssue:[`POST /repos/{owner}/{repo}/issues/{issue_number}/reactions`],createForIssueComment:[`POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions`],createForPullRequestReviewComment:[`POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions`],createForRelease:[`POST /repos/{owner}/{repo}/releases/{release_id}/reactions`],createForTeamDiscussionCommentInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions`],createForTeamDiscussionInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions`],deleteForCommitComment:[`DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}`],deleteForIssue:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}`],deleteForIssueComment:[`DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}`],deleteForPullRequestComment:[`DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}`],deleteForRelease:[`DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}`],deleteForTeamDiscussion:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}`],deleteForTeamDiscussionComment:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}`],listForCommitComment:[`GET /repos/{owner}/{repo}/comments/{comment_id}/reactions`],listForIssue:[`GET /repos/{owner}/{repo}/issues/{issue_number}/reactions`],listForIssueComment:[`GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions`],listForPullRequestReviewComment:[`GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions`],listForRelease:[`GET /repos/{owner}/{repo}/releases/{release_id}/reactions`],listForTeamDiscussionCommentInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions`],listForTeamDiscussionInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions`]},repos:{acceptInvitation:[`PATCH /user/repository_invitations/{invitation_id}`,{},{renamed:[`repos`,`acceptInvitationForAuthenticatedUser`]}],acceptInvitationForAuthenticatedUser:[`PATCH /user/repository_invitations/{invitation_id}`],addAppAccessRestrictions:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`,{},{mapToData:`apps`}],addCollaborator:[`PUT /repos/{owner}/{repo}/collaborators/{username}`],addStatusCheckContexts:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`,{},{mapToData:`contexts`}],addTeamAccessRestrictions:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`,{},{mapToData:`teams`}],addUserAccessRestrictions:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`,{},{mapToData:`users`}],cancelPagesDeployment:[`POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel`],checkAutomatedSecurityFixes:[`GET /repos/{owner}/{repo}/automated-security-fixes`],checkCollaborator:[`GET /repos/{owner}/{repo}/collaborators/{username}`],checkImmutableReleases:[`GET /repos/{owner}/{repo}/immutable-releases`],checkPrivateVulnerabilityReporting:[`GET /repos/{owner}/{repo}/private-vulnerability-reporting`],checkVulnerabilityAlerts:[`GET /repos/{owner}/{repo}/vulnerability-alerts`],codeownersErrors:[`GET /repos/{owner}/{repo}/codeowners/errors`],compareCommits:[`GET /repos/{owner}/{repo}/compare/{base}...{head}`],compareCommitsWithBasehead:[`GET /repos/{owner}/{repo}/compare/{basehead}`],createAttestation:[`POST /repos/{owner}/{repo}/attestations`],createAutolink:[`POST /repos/{owner}/{repo}/autolinks`],createCommitComment:[`POST /repos/{owner}/{repo}/commits/{commit_sha}/comments`],createCommitSignatureProtection:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures`],createCommitStatus:[`POST /repos/{owner}/{repo}/statuses/{sha}`],createDeployKey:[`POST /repos/{owner}/{repo}/keys`],createDeployment:[`POST /repos/{owner}/{repo}/deployments`],createDeploymentBranchPolicy:[`POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies`],createDeploymentProtectionRule:[`POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules`],createDeploymentStatus:[`POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses`],createDispatchEvent:[`POST /repos/{owner}/{repo}/dispatches`],createForAuthenticatedUser:[`POST /user/repos`],createFork:[`POST /repos/{owner}/{repo}/forks`],createInOrg:[`POST /orgs/{org}/repos`],createOrUpdateEnvironment:[`PUT /repos/{owner}/{repo}/environments/{environment_name}`],createOrUpdateFileContents:[`PUT /repos/{owner}/{repo}/contents/{path}`],createOrgRuleset:[`POST /orgs/{org}/rulesets`],createPagesDeployment:[`POST /repos/{owner}/{repo}/pages/deployments`],createPagesSite:[`POST /repos/{owner}/{repo}/pages`],createRelease:[`POST /repos/{owner}/{repo}/releases`],createRepoRuleset:[`POST /repos/{owner}/{repo}/rulesets`],createUsingTemplate:[`POST /repos/{template_owner}/{template_repo}/generate`],createWebhook:[`POST /repos/{owner}/{repo}/hooks`],customPropertiesForReposCreateOrUpdateRepositoryValues:[`PATCH /repos/{owner}/{repo}/properties/values`],customPropertiesForReposGetRepositoryValues:[`GET /repos/{owner}/{repo}/properties/values`],declineInvitation:[`DELETE /user/repository_invitations/{invitation_id}`,{},{renamed:[`repos`,`declineInvitationForAuthenticatedUser`]}],declineInvitationForAuthenticatedUser:[`DELETE /user/repository_invitations/{invitation_id}`],delete:[`DELETE /repos/{owner}/{repo}`],deleteAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions`],deleteAdminBranchProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins`],deleteAnEnvironment:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}`],deleteAutolink:[`DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}`],deleteBranchProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection`],deleteCommitComment:[`DELETE /repos/{owner}/{repo}/comments/{comment_id}`],deleteCommitSignatureProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures`],deleteDeployKey:[`DELETE /repos/{owner}/{repo}/keys/{key_id}`],deleteDeployment:[`DELETE /repos/{owner}/{repo}/deployments/{deployment_id}`],deleteDeploymentBranchPolicy:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}`],deleteFile:[`DELETE /repos/{owner}/{repo}/contents/{path}`],deleteInvitation:[`DELETE /repos/{owner}/{repo}/invitations/{invitation_id}`],deleteOrgRuleset:[`DELETE /orgs/{org}/rulesets/{ruleset_id}`],deletePagesSite:[`DELETE /repos/{owner}/{repo}/pages`],deletePullRequestReviewProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews`],deleteRelease:[`DELETE /repos/{owner}/{repo}/releases/{release_id}`],deleteReleaseAsset:[`DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}`],deleteRepoRuleset:[`DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}`],deleteWebhook:[`DELETE /repos/{owner}/{repo}/hooks/{hook_id}`],disableAutomatedSecurityFixes:[`DELETE /repos/{owner}/{repo}/automated-security-fixes`],disableDeploymentProtectionRule:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}`],disableImmutableReleases:[`DELETE /repos/{owner}/{repo}/immutable-releases`],disablePrivateVulnerabilityReporting:[`DELETE /repos/{owner}/{repo}/private-vulnerability-reporting`],disableVulnerabilityAlerts:[`DELETE /repos/{owner}/{repo}/vulnerability-alerts`],downloadArchive:[`GET /repos/{owner}/{repo}/zipball/{ref}`,{},{renamed:[`repos`,`downloadZipballArchive`]}],downloadTarballArchive:[`GET /repos/{owner}/{repo}/tarball/{ref}`],downloadZipballArchive:[`GET /repos/{owner}/{repo}/zipball/{ref}`],enableAutomatedSecurityFixes:[`PUT /repos/{owner}/{repo}/automated-security-fixes`],enableImmutableReleases:[`PUT /repos/{owner}/{repo}/immutable-releases`],enablePrivateVulnerabilityReporting:[`PUT /repos/{owner}/{repo}/private-vulnerability-reporting`],enableVulnerabilityAlerts:[`PUT /repos/{owner}/{repo}/vulnerability-alerts`],generateReleaseNotes:[`POST /repos/{owner}/{repo}/releases/generate-notes`],get:[`GET /repos/{owner}/{repo}`],getAccessRestrictions:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions`],getAdminBranchProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins`],getAllDeploymentProtectionRules:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules`],getAllEnvironments:[`GET /repos/{owner}/{repo}/environments`],getAllStatusCheckContexts:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`],getAllTopics:[`GET /repos/{owner}/{repo}/topics`],getAppsWithAccessToProtectedBranch:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`],getAutolink:[`GET /repos/{owner}/{repo}/autolinks/{autolink_id}`],getBranch:[`GET /repos/{owner}/{repo}/branches/{branch}`],getBranchProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection`],getBranchRules:[`GET /repos/{owner}/{repo}/rules/branches/{branch}`],getClones:[`GET /repos/{owner}/{repo}/traffic/clones`],getCodeFrequencyStats:[`GET /repos/{owner}/{repo}/stats/code_frequency`],getCollaboratorPermissionLevel:[`GET /repos/{owner}/{repo}/collaborators/{username}/permission`],getCombinedStatusForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/status`],getCommit:[`GET /repos/{owner}/{repo}/commits/{ref}`],getCommitActivityStats:[`GET /repos/{owner}/{repo}/stats/commit_activity`],getCommitComment:[`GET /repos/{owner}/{repo}/comments/{comment_id}`],getCommitSignatureProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures`],getCommunityProfileMetrics:[`GET /repos/{owner}/{repo}/community/profile`],getContent:[`GET /repos/{owner}/{repo}/contents/{path}`],getContributorsStats:[`GET /repos/{owner}/{repo}/stats/contributors`],getCustomDeploymentProtectionRule:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}`],getDeployKey:[`GET /repos/{owner}/{repo}/keys/{key_id}`],getDeployment:[`GET /repos/{owner}/{repo}/deployments/{deployment_id}`],getDeploymentBranchPolicy:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}`],getDeploymentStatus:[`GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}`],getEnvironment:[`GET /repos/{owner}/{repo}/environments/{environment_name}`],getLatestPagesBuild:[`GET /repos/{owner}/{repo}/pages/builds/latest`],getLatestRelease:[`GET /repos/{owner}/{repo}/releases/latest`],getOrgRuleSuite:[`GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}`],getOrgRuleSuites:[`GET /orgs/{org}/rulesets/rule-suites`],getOrgRuleset:[`GET /orgs/{org}/rulesets/{ruleset_id}`],getOrgRulesets:[`GET /orgs/{org}/rulesets`],getPages:[`GET /repos/{owner}/{repo}/pages`],getPagesBuild:[`GET /repos/{owner}/{repo}/pages/builds/{build_id}`],getPagesDeployment:[`GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}`],getPagesHealthCheck:[`GET /repos/{owner}/{repo}/pages/health`],getParticipationStats:[`GET /repos/{owner}/{repo}/stats/participation`],getPullRequestReviewProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews`],getPunchCardStats:[`GET /repos/{owner}/{repo}/stats/punch_card`],getReadme:[`GET /repos/{owner}/{repo}/readme`],getReadmeInDirectory:[`GET /repos/{owner}/{repo}/readme/{dir}`],getRelease:[`GET /repos/{owner}/{repo}/releases/{release_id}`],getReleaseAsset:[`GET /repos/{owner}/{repo}/releases/assets/{asset_id}`],getReleaseByTag:[`GET /repos/{owner}/{repo}/releases/tags/{tag}`],getRepoRuleSuite:[`GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}`],getRepoRuleSuites:[`GET /repos/{owner}/{repo}/rulesets/rule-suites`],getRepoRuleset:[`GET /repos/{owner}/{repo}/rulesets/{ruleset_id}`],getRepoRulesetHistory:[`GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history`],getRepoRulesetVersion:[`GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}`],getRepoRulesets:[`GET /repos/{owner}/{repo}/rulesets`],getStatusChecksProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`],getTeamsWithAccessToProtectedBranch:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`],getTopPaths:[`GET /repos/{owner}/{repo}/traffic/popular/paths`],getTopReferrers:[`GET /repos/{owner}/{repo}/traffic/popular/referrers`],getUsersWithAccessToProtectedBranch:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`],getViews:[`GET /repos/{owner}/{repo}/traffic/views`],getWebhook:[`GET /repos/{owner}/{repo}/hooks/{hook_id}`],getWebhookConfigForRepo:[`GET /repos/{owner}/{repo}/hooks/{hook_id}/config`],getWebhookDelivery:[`GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}`],listActivities:[`GET /repos/{owner}/{repo}/activity`],listAttestations:[`GET /repos/{owner}/{repo}/attestations/{subject_digest}`],listAutolinks:[`GET /repos/{owner}/{repo}/autolinks`],listBranches:[`GET /repos/{owner}/{repo}/branches`],listBranchesForHeadCommit:[`GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head`],listCollaborators:[`GET /repos/{owner}/{repo}/collaborators`],listCommentsForCommit:[`GET /repos/{owner}/{repo}/commits/{commit_sha}/comments`],listCommitCommentsForRepo:[`GET /repos/{owner}/{repo}/comments`],listCommitStatusesForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/statuses`],listCommits:[`GET /repos/{owner}/{repo}/commits`],listContributors:[`GET /repos/{owner}/{repo}/contributors`],listCustomDeploymentRuleIntegrations:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps`],listDeployKeys:[`GET /repos/{owner}/{repo}/keys`],listDeploymentBranchPolicies:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies`],listDeploymentStatuses:[`GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses`],listDeployments:[`GET /repos/{owner}/{repo}/deployments`],listForAuthenticatedUser:[`GET /user/repos`],listForOrg:[`GET /orgs/{org}/repos`],listForUser:[`GET /users/{username}/repos`],listForks:[`GET /repos/{owner}/{repo}/forks`],listInvitations:[`GET /repos/{owner}/{repo}/invitations`],listInvitationsForAuthenticatedUser:[`GET /user/repository_invitations`],listLanguages:[`GET /repos/{owner}/{repo}/languages`],listPagesBuilds:[`GET /repos/{owner}/{repo}/pages/builds`],listPublic:[`GET /repositories`],listPullRequestsAssociatedWithCommit:[`GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls`],listReleaseAssets:[`GET /repos/{owner}/{repo}/releases/{release_id}/assets`],listReleases:[`GET /repos/{owner}/{repo}/releases`],listTags:[`GET /repos/{owner}/{repo}/tags`],listTeams:[`GET /repos/{owner}/{repo}/teams`],listWebhookDeliveries:[`GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries`],listWebhooks:[`GET /repos/{owner}/{repo}/hooks`],merge:[`POST /repos/{owner}/{repo}/merges`],mergeUpstream:[`POST /repos/{owner}/{repo}/merge-upstream`],pingWebhook:[`POST /repos/{owner}/{repo}/hooks/{hook_id}/pings`],redeliverWebhookDelivery:[`POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts`],removeAppAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`,{},{mapToData:`apps`}],removeCollaborator:[`DELETE /repos/{owner}/{repo}/collaborators/{username}`],removeStatusCheckContexts:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`,{},{mapToData:`contexts`}],removeStatusCheckProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`],removeTeamAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`,{},{mapToData:`teams`}],removeUserAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`,{},{mapToData:`users`}],renameBranch:[`POST /repos/{owner}/{repo}/branches/{branch}/rename`],replaceAllTopics:[`PUT /repos/{owner}/{repo}/topics`],requestPagesBuild:[`POST /repos/{owner}/{repo}/pages/builds`],setAdminBranchProtection:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins`],setAppAccessRestrictions:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`,{},{mapToData:`apps`}],setStatusCheckContexts:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`,{},{mapToData:`contexts`}],setTeamAccessRestrictions:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`,{},{mapToData:`teams`}],setUserAccessRestrictions:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`,{},{mapToData:`users`}],testPushWebhook:[`POST /repos/{owner}/{repo}/hooks/{hook_id}/tests`],transfer:[`POST /repos/{owner}/{repo}/transfer`],update:[`PATCH /repos/{owner}/{repo}`],updateBranchProtection:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection`],updateCommitComment:[`PATCH /repos/{owner}/{repo}/comments/{comment_id}`],updateDeploymentBranchPolicy:[`PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}`],updateInformationAboutPagesSite:[`PUT /repos/{owner}/{repo}/pages`],updateInvitation:[`PATCH /repos/{owner}/{repo}/invitations/{invitation_id}`],updateOrgRuleset:[`PUT /orgs/{org}/rulesets/{ruleset_id}`],updatePullRequestReviewProtection:[`PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews`],updateRelease:[`PATCH /repos/{owner}/{repo}/releases/{release_id}`],updateReleaseAsset:[`PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}`],updateRepoRuleset:[`PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}`],updateStatusCheckPotection:[`PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`,{},{renamed:[`repos`,`updateStatusCheckProtection`]}],updateStatusCheckProtection:[`PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`],updateWebhook:[`PATCH /repos/{owner}/{repo}/hooks/{hook_id}`],updateWebhookConfigForRepo:[`PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config`],uploadReleaseAsset:[`POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}`,{baseUrl:`https://uploads.github.com`}]},search:{code:[`GET /search/code`],commits:[`GET /search/commits`],issuesAndPullRequests:[`GET /search/issues`],labels:[`GET /search/labels`],repos:[`GET /search/repositories`],topics:[`GET /search/topics`],users:[`GET /search/users`]},secretScanning:{createPushProtectionBypass:[`POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses`],getAlert:[`GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}`],getScanHistory:[`GET /repos/{owner}/{repo}/secret-scanning/scan-history`],listAlertsForOrg:[`GET /orgs/{org}/secret-scanning/alerts`],listAlertsForRepo:[`GET /repos/{owner}/{repo}/secret-scanning/alerts`],listLocationsForAlert:[`GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations`],listOrgPatternConfigs:[`GET /orgs/{org}/secret-scanning/pattern-configurations`],updateAlert:[`PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}`],updateOrgPatternConfigs:[`PATCH /orgs/{org}/secret-scanning/pattern-configurations`]},securityAdvisories:{createFork:[`POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks`],createPrivateVulnerabilityReport:[`POST /repos/{owner}/{repo}/security-advisories/reports`],createRepositoryAdvisory:[`POST /repos/{owner}/{repo}/security-advisories`],createRepositoryAdvisoryCveRequest:[`POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve`],getGlobalAdvisory:[`GET /advisories/{ghsa_id}`],getRepositoryAdvisory:[`GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}`],listGlobalAdvisories:[`GET /advisories`],listOrgRepositoryAdvisories:[`GET /orgs/{org}/security-advisories`],listRepositoryAdvisories:[`GET /repos/{owner}/{repo}/security-advisories`],updateRepositoryAdvisory:[`PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}`]},teams:{addOrUpdateMembershipForUserInOrg:[`PUT /orgs/{org}/teams/{team_slug}/memberships/{username}`],addOrUpdateRepoPermissionsInOrg:[`PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}`],checkPermissionsForRepoInOrg:[`GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}`],create:[`POST /orgs/{org}/teams`],createDiscussionCommentInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments`],createDiscussionInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions`],deleteDiscussionCommentInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}`],deleteDiscussionInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}`],deleteInOrg:[`DELETE /orgs/{org}/teams/{team_slug}`],getByName:[`GET /orgs/{org}/teams/{team_slug}`],getDiscussionCommentInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}`],getDiscussionInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}`],getMembershipForUserInOrg:[`GET /orgs/{org}/teams/{team_slug}/memberships/{username}`],list:[`GET /orgs/{org}/teams`],listChildInOrg:[`GET /orgs/{org}/teams/{team_slug}/teams`],listDiscussionCommentsInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments`],listDiscussionsInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions`],listForAuthenticatedUser:[`GET /user/teams`],listMembersInOrg:[`GET /orgs/{org}/teams/{team_slug}/members`],listPendingInvitationsInOrg:[`GET /orgs/{org}/teams/{team_slug}/invitations`],listReposInOrg:[`GET /orgs/{org}/teams/{team_slug}/repos`],removeMembershipForUserInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}`],removeRepoInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}`],updateDiscussionCommentInOrg:[`PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}`],updateDiscussionInOrg:[`PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}`],updateInOrg:[`PATCH /orgs/{org}/teams/{team_slug}`]},users:{addEmailForAuthenticated:[`POST /user/emails`,{},{renamed:[`users`,`addEmailForAuthenticatedUser`]}],addEmailForAuthenticatedUser:[`POST /user/emails`],addSocialAccountForAuthenticatedUser:[`POST /user/social_accounts`],block:[`PUT /user/blocks/{username}`],checkBlocked:[`GET /user/blocks/{username}`],checkFollowingForUser:[`GET /users/{username}/following/{target_user}`],checkPersonIsFollowedByAuthenticated:[`GET /user/following/{username}`],createGpgKeyForAuthenticated:[`POST /user/gpg_keys`,{},{renamed:[`users`,`createGpgKeyForAuthenticatedUser`]}],createGpgKeyForAuthenticatedUser:[`POST /user/gpg_keys`],createPublicSshKeyForAuthenticated:[`POST /user/keys`,{},{renamed:[`users`,`createPublicSshKeyForAuthenticatedUser`]}],createPublicSshKeyForAuthenticatedUser:[`POST /user/keys`],createSshSigningKeyForAuthenticatedUser:[`POST /user/ssh_signing_keys`],deleteAttestationsBulk:[`POST /users/{username}/attestations/delete-request`],deleteAttestationsById:[`DELETE /users/{username}/attestations/{attestation_id}`],deleteAttestationsBySubjectDigest:[`DELETE /users/{username}/attestations/digest/{subject_digest}`],deleteEmailForAuthenticated:[`DELETE /user/emails`,{},{renamed:[`users`,`deleteEmailForAuthenticatedUser`]}],deleteEmailForAuthenticatedUser:[`DELETE /user/emails`],deleteGpgKeyForAuthenticated:[`DELETE /user/gpg_keys/{gpg_key_id}`,{},{renamed:[`users`,`deleteGpgKeyForAuthenticatedUser`]}],deleteGpgKeyForAuthenticatedUser:[`DELETE /user/gpg_keys/{gpg_key_id}`],deletePublicSshKeyForAuthenticated:[`DELETE /user/keys/{key_id}`,{},{renamed:[`users`,`deletePublicSshKeyForAuthenticatedUser`]}],deletePublicSshKeyForAuthenticatedUser:[`DELETE /user/keys/{key_id}`],deleteSocialAccountForAuthenticatedUser:[`DELETE /user/social_accounts`],deleteSshSigningKeyForAuthenticatedUser:[`DELETE /user/ssh_signing_keys/{ssh_signing_key_id}`],follow:[`PUT /user/following/{username}`],getAuthenticated:[`GET /user`],getById:[`GET /user/{account_id}`],getByUsername:[`GET /users/{username}`],getContextForUser:[`GET /users/{username}/hovercard`],getGpgKeyForAuthenticated:[`GET /user/gpg_keys/{gpg_key_id}`,{},{renamed:[`users`,`getGpgKeyForAuthenticatedUser`]}],getGpgKeyForAuthenticatedUser:[`GET /user/gpg_keys/{gpg_key_id}`],getPublicSshKeyForAuthenticated:[`GET /user/keys/{key_id}`,{},{renamed:[`users`,`getPublicSshKeyForAuthenticatedUser`]}],getPublicSshKeyForAuthenticatedUser:[`GET /user/keys/{key_id}`],getSshSigningKeyForAuthenticatedUser:[`GET /user/ssh_signing_keys/{ssh_signing_key_id}`],list:[`GET /users`],listAttestations:[`GET /users/{username}/attestations/{subject_digest}`],listAttestationsBulk:[`POST /users/{username}/attestations/bulk-list{?per_page,before,after}`],listBlockedByAuthenticated:[`GET /user/blocks`,{},{renamed:[`users`,`listBlockedByAuthenticatedUser`]}],listBlockedByAuthenticatedUser:[`GET /user/blocks`],listEmailsForAuthenticated:[`GET /user/emails`,{},{renamed:[`users`,`listEmailsForAuthenticatedUser`]}],listEmailsForAuthenticatedUser:[`GET /user/emails`],listFollowedByAuthenticated:[`GET /user/following`,{},{renamed:[`users`,`listFollowedByAuthenticatedUser`]}],listFollowedByAuthenticatedUser:[`GET /user/following`],listFollowersForAuthenticatedUser:[`GET /user/followers`],listFollowersForUser:[`GET /users/{username}/followers`],listFollowingForUser:[`GET /users/{username}/following`],listGpgKeysForAuthenticated:[`GET /user/gpg_keys`,{},{renamed:[`users`,`listGpgKeysForAuthenticatedUser`]}],listGpgKeysForAuthenticatedUser:[`GET /user/gpg_keys`],listGpgKeysForUser:[`GET /users/{username}/gpg_keys`],listPublicEmailsForAuthenticated:[`GET /user/public_emails`,{},{renamed:[`users`,`listPublicEmailsForAuthenticatedUser`]}],listPublicEmailsForAuthenticatedUser:[`GET /user/public_emails`],listPublicKeysForUser:[`GET /users/{username}/keys`],listPublicSshKeysForAuthenticated:[`GET /user/keys`,{},{renamed:[`users`,`listPublicSshKeysForAuthenticatedUser`]}],listPublicSshKeysForAuthenticatedUser:[`GET /user/keys`],listSocialAccountsForAuthenticatedUser:[`GET /user/social_accounts`],listSocialAccountsForUser:[`GET /users/{username}/social_accounts`],listSshSigningKeysForAuthenticatedUser:[`GET /user/ssh_signing_keys`],listSshSigningKeysForUser:[`GET /users/{username}/ssh_signing_keys`],setPrimaryEmailVisibilityForAuthenticated:[`PATCH /user/email/visibility`,{},{renamed:[`users`,`setPrimaryEmailVisibilityForAuthenticatedUser`]}],setPrimaryEmailVisibilityForAuthenticatedUser:[`PATCH /user/email/visibility`],unblock:[`DELETE /user/blocks/{username}`],unfollow:[`DELETE /user/following/{username}`],updateAuthenticated:[`PATCH /user`]}};const K=new Map;for(let[e,t]of Object.entries(Fa))for(let[n,r]of Object.entries(t)){let[t,i,a]=r,[o,s]=t.split(/ /),c=Object.assign({method:o,url:s},i);K.has(e)||K.set(e,new Map),K.get(e).set(n,{scope:e,methodName:n,endpointDefaults:c,decorations:a})}const Ia={has({scope:e},t){return K.get(e).has(t)},getOwnPropertyDescriptor(e,t){return{value:this.get(e,t),configurable:!0,writable:!0,enumerable:!0}},defineProperty(e,t,n){return Object.defineProperty(e.cache,t,n),!0},deleteProperty(e,t){return delete e.cache[t],!0},ownKeys({scope:e}){return[...K.get(e).keys()]},set(e,t,n){return e.cache[t]=n},get({octokit:e,scope:t,cache:n},r){if(n[r])return n[r];let i=K.get(t).get(r);if(!i)return;let{endpointDefaults:a,decorations:o}=i;return n[r]=o?Ra(e,t,r,a,o):e.request.defaults(a),n[r]}};function La(e){let t={};for(let n of K.keys())t[n]=new Proxy({octokit:e,scope:n,cache:{}},Ia);return t}function Ra(e,t,n,r,i){let a=e.request.defaults(r);function o(...r){let o=a.endpoint.merge(...r);if(i.mapToData)return o=Object.assign({},o,{data:o[i.mapToData],[i.mapToData]:void 0}),a(o);if(i.renamed){let[r,a]=i.renamed;e.log.warn(`octokit.${t}.${n}() has been renamed to octokit.${r}.${a}()`)}if(i.deprecated&&e.log.warn(i.deprecated),i.renamedParameters){let o=a.endpoint.merge(...r);for(let[r,a]of Object.entries(i.renamedParameters))r in o&&(e.log.warn(`"${r}" parameter is deprecated for "octokit.${t}.${n}()". Use "${a}" instead`),a in o||(o[a]=o[r]),delete o[r]);return a(o)}return a(...r)}return Object.assign(o,a)}function za(e){let t=La(e);return{...t,rest:t}}za.VERSION=`17.0.0`;const Ba=Da.plugin(Oa,za,Pa).defaults({userAgent:`octokit-rest.js/22.0.1`});function Va(e){let t=e?.cause;if(typeof t?.code==`string`)return t.code;let n=e?.code;return typeof n==`string`?n:void 0}const Ha=[`CERT`,`SELF_SIGNED`,`SIGNATURE`,`ISSUER`];function Ua(e,t){let n=Va(e);if(n&&Ha.some(e=>n.includes(e)))return{kind:`tls`,message:`Could not verify the TLS certificate for ${t}. If this is a GitHub Enterprise Server with a self-signed or internal-CA certificate, add its CA to your system trust store (macOS Keychain, Windows certificate store, or your distro's ca-certificates).`};let r=e?.status;return r===401?{kind:`token`,message:`Token invalid for ${t}`}:r===403?{kind:`token`,message:`Token rejected by ${t} — check that it has the repo and read:user scopes, and that it is authorized for SSO if the organization requires it`}:n?{kind:`network`,message:`Could not reach ${t} (${n})`}:{kind:`token`,message:`Authentication failed for ${t}`}}async function Wa(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString(`utf8`).trim()}async function Ga(e,t,n){let{host:r,json:i}=e;G(r);let a=await(n??(()=>Ji({message:`Enter PAT:`})))();a||(process.stderr.write(`No token provided
|
|
8
|
-
`),process.exit(1));let o=r===`github.com`?void 0:`https://${r}/api/v3`,s=new
|
|
7
|
+
`)}var sa=class extends Error{constructor(e,t,n){super(oa(n)),this.request=e,this.headers=t,this.response=n,this.errors=n.errors,this.data=n.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name=`GraphqlResponseError`;errors;data},ca=[`method`,`baseUrl`,`url`,`headers`,`request`,`query`,`mediaType`,`operationName`],la=[`query`,`method`,`url`],ua=/\/api\/v3\/?$/;function da(e,t,n){if(n){if(typeof t==`string`&&`query`in n)return Promise.reject(Error(`[@octokit/graphql] "query" cannot be used as variable name`));for(let e in n)if(la.includes(e))return Promise.reject(Error(`[@octokit/graphql] "${e}" cannot be used as variable name`))}let r=typeof t==`string`?Object.assign({query:t},n):t,i=Object.keys(r).reduce((e,t)=>ca.includes(t)?(e[t]=r[t],e):(e.variables||={},e.variables[t]=r[t],e),{}),a=r.baseUrl||e.endpoint.DEFAULTS.baseUrl;return ua.test(a)&&(i.url=a.replace(ua,`/api/graphql`)),e(i).then(e=>{if(e.data.errors){let t={};for(let n of Object.keys(e.headers))t[n]=e.headers[n];throw new sa(i,t,e.data)}return e.data.data})}function fa(e,t){let n=e.defaults(t);return Object.assign((e,t)=>da(n,e,t),{defaults:fa.bind(null,n),endpoint:n.endpoint})}fa(Sr,{headers:{"user-agent":`octokit-graphql.js/${aa} ${xr()}`},method:`POST`,url:`/graphql`});function pa(e){return fa(e,{method:`POST`,url:`/graphql`})}var ma=`(?:[a-zA-Z0-9_-]+)`,ha=`\\.`,ga=RegExp(`^${ma}${ha}${ma}${ha}${ma}$`),_a=ga.test.bind(ga);async function va(e){let t=_a(e),n=e.startsWith(`v1.`)||e.startsWith(`ghs_`),r=e.startsWith(`ghu_`);return{type:`token`,token:e,tokenType:t?`app`:n?`installation`:r?`user-to-server`:`oauth`}}function ya(e){return e.split(/\./).length===3?`bearer ${e}`:`token ${e}`}async function ba(e,t,n,r){let i=t.endpoint.merge(n,r);return i.headers.authorization=ya(e),t(i)}var xa=function(e){if(!e)throw Error(`[@octokit/auth-token] No token passed to createTokenAuth`);if(typeof e!=`string`)throw Error(`[@octokit/auth-token] Token passed to createTokenAuth is not a string`);return e=e.replace(/^(token|bearer) +/i,``),Object.assign(va.bind(null,e),{hook:ba.bind(null,e)})};const Sa=`7.0.6`,Ca=()=>{},wa=console.warn.bind(console),Ta=console.error.bind(console);function Ea(e={}){return typeof e.debug!=`function`&&(e.debug=Ca),typeof e.info!=`function`&&(e.info=Ca),typeof e.warn!=`function`&&(e.warn=wa),typeof e.error!=`function`&&(e.error=Ta),e}const Da=`octokit-core.js/${Sa} ${xr()}`;var Oa=class{static VERSION=Sa;static defaults(e){return class extends this{constructor(...t){let n=t[0]||{};if(typeof e==`function`){super(e(n));return}super(Object.assign({},e,n,n.userAgent&&e.userAgent?{userAgent:`${n.userAgent} ${e.userAgent}`}:null))}}}static plugins=[];static plugin(...e){let t=this.plugins;return class extends this{static plugins=t.concat(e.filter(e=>!t.includes(e)))}}constructor(e={}){let t=new ia.Collection,n={baseUrl:Sr.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:t.bind(null,`request`)}),mediaType:{previews:[],format:``}};if(n.headers[`user-agent`]=e.userAgent?`${e.userAgent} ${Da}`:Da,e.baseUrl&&(n.baseUrl=e.baseUrl),e.previews&&(n.mediaType.previews=e.previews),e.timeZone&&(n.headers[`time-zone`]=e.timeZone),this.request=Sr.defaults(n),this.graphql=pa(this.request).defaults(n),this.log=Ea(e.log),this.hook=t,e.authStrategy){let{authStrategy:n,...r}=e,i=n(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:r},e.auth));t.wrap(`request`,i.hook),this.auth=i}else if(!e.auth)this.auth=async()=>({type:`unauthenticated`});else{let n=xa(e.auth);t.wrap(`request`,n.hook),this.auth=n}let r=this.constructor;for(let t=0;t<r.plugins.length;++t)Object.assign(this,r.plugins[t](this,e))}request;graphql;log;hook;auth};function ka(e){e.hook.wrap(`request`,(t,n)=>{e.log.debug(`request`,n);let r=Date.now(),i=e.request.endpoint.parse(n),a=i.url.replace(n.baseUrl,``);return t(n).then(t=>{let n=t.headers[`x-github-request-id`];return e.log.info(`${i.method} ${a} - ${t.status} with id ${n} in ${Date.now()-r}ms`),t}).catch(t=>{let n=t.response?.headers[`x-github-request-id`]||`UNKNOWN`;throw e.log.error(`${i.method} ${a} - ${t.status} with id ${n} in ${Date.now()-r}ms`),t})})}ka.VERSION=`6.0.0`;var Aa=`0.0.0-development`;function ja(e){if(!e.data)return{...e,data:[]};if(!((`total_count`in e.data||`total_commits`in e.data)&&!(`url`in e.data)))return e;let t=e.data.incomplete_results,n=e.data.repository_selection,r=e.data.total_count,i=e.data.total_commits;delete e.data.incomplete_results,delete e.data.repository_selection,delete e.data.total_count,delete e.data.total_commits;let a=Object.keys(e.data)[0];return e.data=e.data[a],t!==void 0&&(e.data.incomplete_results=t),n!==void 0&&(e.data.repository_selection=n),e.data.total_count=r,e.data.total_commits=i,e}function Ma(e,t,n){let r=typeof t==`function`?t.endpoint(n):e.request.endpoint(t,n),i=typeof t==`function`?t:e.request,a=r.method,o=r.headers,s=r.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!s)return{done:!0};try{let e=ja(await i({method:a,url:s,headers:o}));if(s=((e.headers.link||``).match(/<([^<>]+)>;\s*rel="next"/)||[])[1],!s&&`total_commits`in e.data){let t=new URL(e.url),n=t.searchParams,r=parseInt(n.get(`page`)||`1`,10);r*parseInt(n.get(`per_page`)||`250`,10)<e.data.total_commits&&(n.set(`page`,String(r+1)),s=t.toString())}return{value:e}}catch(e){if(e.status!==409)throw e;return s=``,{value:{status:200,headers:{},data:[]}}}}})}}function Na(e,t,n,r){return typeof n==`function`&&(r=n,n=void 0),Pa(e,[],Ma(e,t,n)[Symbol.asyncIterator](),r)}function Pa(e,t,n,r){return n.next().then(i=>{if(i.done)return t;let a=!1;function o(){a=!0}return t=t.concat(r?r(i.value,o):i.value.data),a?t:Pa(e,t,n,r)})}Object.assign(Na,{iterator:Ma});function Fa(e){return{paginate:Object.assign(Na.bind(null,e),{iterator:Ma.bind(null,e)})}}Fa.VERSION=Aa;var Ia={actions:{addCustomLabelsToSelfHostedRunnerForOrg:[`POST /orgs/{org}/actions/runners/{runner_id}/labels`],addCustomLabelsToSelfHostedRunnerForRepo:[`POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],addRepoAccessToSelfHostedRunnerGroupInOrg:[`PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}`],addSelectedRepoToOrgSecret:[`PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}`],addSelectedRepoToOrgVariable:[`PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}`],approveWorkflowRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve`],cancelWorkflowRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel`],createEnvironmentVariable:[`POST /repos/{owner}/{repo}/environments/{environment_name}/variables`],createHostedRunnerForOrg:[`POST /orgs/{org}/actions/hosted-runners`],createOrUpdateEnvironmentSecret:[`PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}`],createOrUpdateOrgSecret:[`PUT /orgs/{org}/actions/secrets/{secret_name}`],createOrUpdateRepoSecret:[`PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}`],createOrgVariable:[`POST /orgs/{org}/actions/variables`],createRegistrationTokenForOrg:[`POST /orgs/{org}/actions/runners/registration-token`],createRegistrationTokenForRepo:[`POST /repos/{owner}/{repo}/actions/runners/registration-token`],createRemoveTokenForOrg:[`POST /orgs/{org}/actions/runners/remove-token`],createRemoveTokenForRepo:[`POST /repos/{owner}/{repo}/actions/runners/remove-token`],createRepoVariable:[`POST /repos/{owner}/{repo}/actions/variables`],createWorkflowDispatch:[`POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches`],deleteActionsCacheById:[`DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}`],deleteActionsCacheByKey:[`DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}`],deleteArtifact:[`DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}`],deleteCustomImageFromOrg:[`DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}`],deleteCustomImageVersionFromOrg:[`DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}`],deleteEnvironmentSecret:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}`],deleteEnvironmentVariable:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}`],deleteHostedRunnerForOrg:[`DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}`],deleteOrgSecret:[`DELETE /orgs/{org}/actions/secrets/{secret_name}`],deleteOrgVariable:[`DELETE /orgs/{org}/actions/variables/{name}`],deleteRepoSecret:[`DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}`],deleteRepoVariable:[`DELETE /repos/{owner}/{repo}/actions/variables/{name}`],deleteSelfHostedRunnerFromOrg:[`DELETE /orgs/{org}/actions/runners/{runner_id}`],deleteSelfHostedRunnerFromRepo:[`DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}`],deleteWorkflowRun:[`DELETE /repos/{owner}/{repo}/actions/runs/{run_id}`],deleteWorkflowRunLogs:[`DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs`],disableSelectedRepositoryGithubActionsOrganization:[`DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}`],disableWorkflow:[`PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable`],downloadArtifact:[`GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}`],downloadJobLogsForWorkflowRun:[`GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs`],downloadWorkflowRunAttemptLogs:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs`],downloadWorkflowRunLogs:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs`],enableSelectedRepositoryGithubActionsOrganization:[`PUT /orgs/{org}/actions/permissions/repositories/{repository_id}`],enableWorkflow:[`PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable`],forceCancelWorkflowRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel`],generateRunnerJitconfigForOrg:[`POST /orgs/{org}/actions/runners/generate-jitconfig`],generateRunnerJitconfigForRepo:[`POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig`],getActionsCacheList:[`GET /repos/{owner}/{repo}/actions/caches`],getActionsCacheUsage:[`GET /repos/{owner}/{repo}/actions/cache/usage`],getActionsCacheUsageByRepoForOrg:[`GET /orgs/{org}/actions/cache/usage-by-repository`],getActionsCacheUsageForOrg:[`GET /orgs/{org}/actions/cache/usage`],getAllowedActionsOrganization:[`GET /orgs/{org}/actions/permissions/selected-actions`],getAllowedActionsRepository:[`GET /repos/{owner}/{repo}/actions/permissions/selected-actions`],getArtifact:[`GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}`],getCustomImageForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}`],getCustomImageVersionForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}`],getCustomOidcSubClaimForRepo:[`GET /repos/{owner}/{repo}/actions/oidc/customization/sub`],getEnvironmentPublicKey:[`GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key`],getEnvironmentSecret:[`GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}`],getEnvironmentVariable:[`GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}`],getGithubActionsDefaultWorkflowPermissionsOrganization:[`GET /orgs/{org}/actions/permissions/workflow`],getGithubActionsDefaultWorkflowPermissionsRepository:[`GET /repos/{owner}/{repo}/actions/permissions/workflow`],getGithubActionsPermissionsOrganization:[`GET /orgs/{org}/actions/permissions`],getGithubActionsPermissionsRepository:[`GET /repos/{owner}/{repo}/actions/permissions`],getHostedRunnerForOrg:[`GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}`],getHostedRunnersGithubOwnedImagesForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/github-owned`],getHostedRunnersLimitsForOrg:[`GET /orgs/{org}/actions/hosted-runners/limits`],getHostedRunnersMachineSpecsForOrg:[`GET /orgs/{org}/actions/hosted-runners/machine-sizes`],getHostedRunnersPartnerImagesForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/partner`],getHostedRunnersPlatformsForOrg:[`GET /orgs/{org}/actions/hosted-runners/platforms`],getJobForWorkflowRun:[`GET /repos/{owner}/{repo}/actions/jobs/{job_id}`],getOrgPublicKey:[`GET /orgs/{org}/actions/secrets/public-key`],getOrgSecret:[`GET /orgs/{org}/actions/secrets/{secret_name}`],getOrgVariable:[`GET /orgs/{org}/actions/variables/{name}`],getPendingDeploymentsForRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments`],getRepoPermissions:[`GET /repos/{owner}/{repo}/actions/permissions`,{},{renamed:[`actions`,`getGithubActionsPermissionsRepository`]}],getRepoPublicKey:[`GET /repos/{owner}/{repo}/actions/secrets/public-key`],getRepoSecret:[`GET /repos/{owner}/{repo}/actions/secrets/{secret_name}`],getRepoVariable:[`GET /repos/{owner}/{repo}/actions/variables/{name}`],getReviewsForRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals`],getSelfHostedRunnerForOrg:[`GET /orgs/{org}/actions/runners/{runner_id}`],getSelfHostedRunnerForRepo:[`GET /repos/{owner}/{repo}/actions/runners/{runner_id}`],getWorkflow:[`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}`],getWorkflowAccessToRepository:[`GET /repos/{owner}/{repo}/actions/permissions/access`],getWorkflowRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}`],getWorkflowRunAttempt:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}`],getWorkflowRunUsage:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing`],getWorkflowUsage:[`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing`],listArtifactsForRepo:[`GET /repos/{owner}/{repo}/actions/artifacts`],listCustomImageVersionsForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions`],listCustomImagesForOrg:[`GET /orgs/{org}/actions/hosted-runners/images/custom`],listEnvironmentSecrets:[`GET /repos/{owner}/{repo}/environments/{environment_name}/secrets`],listEnvironmentVariables:[`GET /repos/{owner}/{repo}/environments/{environment_name}/variables`],listGithubHostedRunnersInGroupForOrg:[`GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners`],listHostedRunnersForOrg:[`GET /orgs/{org}/actions/hosted-runners`],listJobsForWorkflowRun:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs`],listJobsForWorkflowRunAttempt:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs`],listLabelsForSelfHostedRunnerForOrg:[`GET /orgs/{org}/actions/runners/{runner_id}/labels`],listLabelsForSelfHostedRunnerForRepo:[`GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],listOrgSecrets:[`GET /orgs/{org}/actions/secrets`],listOrgVariables:[`GET /orgs/{org}/actions/variables`],listRepoOrganizationSecrets:[`GET /repos/{owner}/{repo}/actions/organization-secrets`],listRepoOrganizationVariables:[`GET /repos/{owner}/{repo}/actions/organization-variables`],listRepoSecrets:[`GET /repos/{owner}/{repo}/actions/secrets`],listRepoVariables:[`GET /repos/{owner}/{repo}/actions/variables`],listRepoWorkflows:[`GET /repos/{owner}/{repo}/actions/workflows`],listRunnerApplicationsForOrg:[`GET /orgs/{org}/actions/runners/downloads`],listRunnerApplicationsForRepo:[`GET /repos/{owner}/{repo}/actions/runners/downloads`],listSelectedReposForOrgSecret:[`GET /orgs/{org}/actions/secrets/{secret_name}/repositories`],listSelectedReposForOrgVariable:[`GET /orgs/{org}/actions/variables/{name}/repositories`],listSelectedRepositoriesEnabledGithubActionsOrganization:[`GET /orgs/{org}/actions/permissions/repositories`],listSelfHostedRunnersForOrg:[`GET /orgs/{org}/actions/runners`],listSelfHostedRunnersForRepo:[`GET /repos/{owner}/{repo}/actions/runners`],listWorkflowRunArtifacts:[`GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts`],listWorkflowRuns:[`GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs`],listWorkflowRunsForRepo:[`GET /repos/{owner}/{repo}/actions/runs`],reRunJobForWorkflowRun:[`POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun`],reRunWorkflow:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun`],reRunWorkflowFailedJobs:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs`],removeAllCustomLabelsFromSelfHostedRunnerForOrg:[`DELETE /orgs/{org}/actions/runners/{runner_id}/labels`],removeAllCustomLabelsFromSelfHostedRunnerForRepo:[`DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],removeCustomLabelFromSelfHostedRunnerForOrg:[`DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}`],removeCustomLabelFromSelfHostedRunnerForRepo:[`DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}`],removeSelectedRepoFromOrgSecret:[`DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}`],removeSelectedRepoFromOrgVariable:[`DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}`],reviewCustomGatesForRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule`],reviewPendingDeploymentsForRun:[`POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments`],setAllowedActionsOrganization:[`PUT /orgs/{org}/actions/permissions/selected-actions`],setAllowedActionsRepository:[`PUT /repos/{owner}/{repo}/actions/permissions/selected-actions`],setCustomLabelsForSelfHostedRunnerForOrg:[`PUT /orgs/{org}/actions/runners/{runner_id}/labels`],setCustomLabelsForSelfHostedRunnerForRepo:[`PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels`],setCustomOidcSubClaimForRepo:[`PUT /repos/{owner}/{repo}/actions/oidc/customization/sub`],setGithubActionsDefaultWorkflowPermissionsOrganization:[`PUT /orgs/{org}/actions/permissions/workflow`],setGithubActionsDefaultWorkflowPermissionsRepository:[`PUT /repos/{owner}/{repo}/actions/permissions/workflow`],setGithubActionsPermissionsOrganization:[`PUT /orgs/{org}/actions/permissions`],setGithubActionsPermissionsRepository:[`PUT /repos/{owner}/{repo}/actions/permissions`],setSelectedReposForOrgSecret:[`PUT /orgs/{org}/actions/secrets/{secret_name}/repositories`],setSelectedReposForOrgVariable:[`PUT /orgs/{org}/actions/variables/{name}/repositories`],setSelectedRepositoriesEnabledGithubActionsOrganization:[`PUT /orgs/{org}/actions/permissions/repositories`],setWorkflowAccessToRepository:[`PUT /repos/{owner}/{repo}/actions/permissions/access`],updateEnvironmentVariable:[`PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}`],updateHostedRunnerForOrg:[`PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}`],updateOrgVariable:[`PATCH /orgs/{org}/actions/variables/{name}`],updateRepoVariable:[`PATCH /repos/{owner}/{repo}/actions/variables/{name}`]},activity:{checkRepoIsStarredByAuthenticatedUser:[`GET /user/starred/{owner}/{repo}`],deleteRepoSubscription:[`DELETE /repos/{owner}/{repo}/subscription`],deleteThreadSubscription:[`DELETE /notifications/threads/{thread_id}/subscription`],getFeeds:[`GET /feeds`],getRepoSubscription:[`GET /repos/{owner}/{repo}/subscription`],getThread:[`GET /notifications/threads/{thread_id}`],getThreadSubscriptionForAuthenticatedUser:[`GET /notifications/threads/{thread_id}/subscription`],listEventsForAuthenticatedUser:[`GET /users/{username}/events`],listNotificationsForAuthenticatedUser:[`GET /notifications`],listOrgEventsForAuthenticatedUser:[`GET /users/{username}/events/orgs/{org}`],listPublicEvents:[`GET /events`],listPublicEventsForRepoNetwork:[`GET /networks/{owner}/{repo}/events`],listPublicEventsForUser:[`GET /users/{username}/events/public`],listPublicOrgEvents:[`GET /orgs/{org}/events`],listReceivedEventsForUser:[`GET /users/{username}/received_events`],listReceivedPublicEventsForUser:[`GET /users/{username}/received_events/public`],listRepoEvents:[`GET /repos/{owner}/{repo}/events`],listRepoNotificationsForAuthenticatedUser:[`GET /repos/{owner}/{repo}/notifications`],listReposStarredByAuthenticatedUser:[`GET /user/starred`],listReposStarredByUser:[`GET /users/{username}/starred`],listReposWatchedByUser:[`GET /users/{username}/subscriptions`],listStargazersForRepo:[`GET /repos/{owner}/{repo}/stargazers`],listWatchedReposForAuthenticatedUser:[`GET /user/subscriptions`],listWatchersForRepo:[`GET /repos/{owner}/{repo}/subscribers`],markNotificationsAsRead:[`PUT /notifications`],markRepoNotificationsAsRead:[`PUT /repos/{owner}/{repo}/notifications`],markThreadAsDone:[`DELETE /notifications/threads/{thread_id}`],markThreadAsRead:[`PATCH /notifications/threads/{thread_id}`],setRepoSubscription:[`PUT /repos/{owner}/{repo}/subscription`],setThreadSubscription:[`PUT /notifications/threads/{thread_id}/subscription`],starRepoForAuthenticatedUser:[`PUT /user/starred/{owner}/{repo}`],unstarRepoForAuthenticatedUser:[`DELETE /user/starred/{owner}/{repo}`]},apps:{addRepoToInstallation:[`PUT /user/installations/{installation_id}/repositories/{repository_id}`,{},{renamed:[`apps`,`addRepoToInstallationForAuthenticatedUser`]}],addRepoToInstallationForAuthenticatedUser:[`PUT /user/installations/{installation_id}/repositories/{repository_id}`],checkToken:[`POST /applications/{client_id}/token`],createFromManifest:[`POST /app-manifests/{code}/conversions`],createInstallationAccessToken:[`POST /app/installations/{installation_id}/access_tokens`],deleteAuthorization:[`DELETE /applications/{client_id}/grant`],deleteInstallation:[`DELETE /app/installations/{installation_id}`],deleteToken:[`DELETE /applications/{client_id}/token`],getAuthenticated:[`GET /app`],getBySlug:[`GET /apps/{app_slug}`],getInstallation:[`GET /app/installations/{installation_id}`],getOrgInstallation:[`GET /orgs/{org}/installation`],getRepoInstallation:[`GET /repos/{owner}/{repo}/installation`],getSubscriptionPlanForAccount:[`GET /marketplace_listing/accounts/{account_id}`],getSubscriptionPlanForAccountStubbed:[`GET /marketplace_listing/stubbed/accounts/{account_id}`],getUserInstallation:[`GET /users/{username}/installation`],getWebhookConfigForApp:[`GET /app/hook/config`],getWebhookDelivery:[`GET /app/hook/deliveries/{delivery_id}`],listAccountsForPlan:[`GET /marketplace_listing/plans/{plan_id}/accounts`],listAccountsForPlanStubbed:[`GET /marketplace_listing/stubbed/plans/{plan_id}/accounts`],listInstallationReposForAuthenticatedUser:[`GET /user/installations/{installation_id}/repositories`],listInstallationRequestsForAuthenticatedApp:[`GET /app/installation-requests`],listInstallations:[`GET /app/installations`],listInstallationsForAuthenticatedUser:[`GET /user/installations`],listPlans:[`GET /marketplace_listing/plans`],listPlansStubbed:[`GET /marketplace_listing/stubbed/plans`],listReposAccessibleToInstallation:[`GET /installation/repositories`],listSubscriptionsForAuthenticatedUser:[`GET /user/marketplace_purchases`],listSubscriptionsForAuthenticatedUserStubbed:[`GET /user/marketplace_purchases/stubbed`],listWebhookDeliveries:[`GET /app/hook/deliveries`],redeliverWebhookDelivery:[`POST /app/hook/deliveries/{delivery_id}/attempts`],removeRepoFromInstallation:[`DELETE /user/installations/{installation_id}/repositories/{repository_id}`,{},{renamed:[`apps`,`removeRepoFromInstallationForAuthenticatedUser`]}],removeRepoFromInstallationForAuthenticatedUser:[`DELETE /user/installations/{installation_id}/repositories/{repository_id}`],resetToken:[`PATCH /applications/{client_id}/token`],revokeInstallationAccessToken:[`DELETE /installation/token`],scopeToken:[`POST /applications/{client_id}/token/scoped`],suspendInstallation:[`PUT /app/installations/{installation_id}/suspended`],unsuspendInstallation:[`DELETE /app/installations/{installation_id}/suspended`],updateWebhookConfigForApp:[`PATCH /app/hook/config`]},billing:{getGithubActionsBillingOrg:[`GET /orgs/{org}/settings/billing/actions`],getGithubActionsBillingUser:[`GET /users/{username}/settings/billing/actions`],getGithubBillingPremiumRequestUsageReportOrg:[`GET /organizations/{org}/settings/billing/premium_request/usage`],getGithubBillingPremiumRequestUsageReportUser:[`GET /users/{username}/settings/billing/premium_request/usage`],getGithubBillingUsageReportOrg:[`GET /organizations/{org}/settings/billing/usage`],getGithubBillingUsageReportUser:[`GET /users/{username}/settings/billing/usage`],getGithubPackagesBillingOrg:[`GET /orgs/{org}/settings/billing/packages`],getGithubPackagesBillingUser:[`GET /users/{username}/settings/billing/packages`],getSharedStorageBillingOrg:[`GET /orgs/{org}/settings/billing/shared-storage`],getSharedStorageBillingUser:[`GET /users/{username}/settings/billing/shared-storage`]},campaigns:{createCampaign:[`POST /orgs/{org}/campaigns`],deleteCampaign:[`DELETE /orgs/{org}/campaigns/{campaign_number}`],getCampaignSummary:[`GET /orgs/{org}/campaigns/{campaign_number}`],listOrgCampaigns:[`GET /orgs/{org}/campaigns`],updateCampaign:[`PATCH /orgs/{org}/campaigns/{campaign_number}`]},checks:{create:[`POST /repos/{owner}/{repo}/check-runs`],createSuite:[`POST /repos/{owner}/{repo}/check-suites`],get:[`GET /repos/{owner}/{repo}/check-runs/{check_run_id}`],getSuite:[`GET /repos/{owner}/{repo}/check-suites/{check_suite_id}`],listAnnotations:[`GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations`],listForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/check-runs`],listForSuite:[`GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs`],listSuitesForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/check-suites`],rerequestRun:[`POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest`],rerequestSuite:[`POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest`],setSuitesPreferences:[`PATCH /repos/{owner}/{repo}/check-suites/preferences`],update:[`PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}`]},codeScanning:{commitAutofix:[`POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits`],createAutofix:[`POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix`],createVariantAnalysis:[`POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses`],deleteAnalysis:[`DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}`],deleteCodeqlDatabase:[`DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}`],getAlert:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}`,{},{renamedParameters:{alert_id:`alert_number`}}],getAnalysis:[`GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}`],getAutofix:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix`],getCodeqlDatabase:[`GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}`],getDefaultSetup:[`GET /repos/{owner}/{repo}/code-scanning/default-setup`],getSarif:[`GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}`],getVariantAnalysis:[`GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}`],getVariantAnalysisRepoTask:[`GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}`],listAlertInstances:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances`],listAlertsForOrg:[`GET /orgs/{org}/code-scanning/alerts`],listAlertsForRepo:[`GET /repos/{owner}/{repo}/code-scanning/alerts`],listAlertsInstances:[`GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances`,{},{renamed:[`codeScanning`,`listAlertInstances`]}],listCodeqlDatabases:[`GET /repos/{owner}/{repo}/code-scanning/codeql/databases`],listRecentAnalyses:[`GET /repos/{owner}/{repo}/code-scanning/analyses`],updateAlert:[`PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}`],updateDefaultSetup:[`PATCH /repos/{owner}/{repo}/code-scanning/default-setup`],uploadSarif:[`POST /repos/{owner}/{repo}/code-scanning/sarifs`]},codeSecurity:{attachConfiguration:[`POST /orgs/{org}/code-security/configurations/{configuration_id}/attach`],attachEnterpriseConfiguration:[`POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach`],createConfiguration:[`POST /orgs/{org}/code-security/configurations`],createConfigurationForEnterprise:[`POST /enterprises/{enterprise}/code-security/configurations`],deleteConfiguration:[`DELETE /orgs/{org}/code-security/configurations/{configuration_id}`],deleteConfigurationForEnterprise:[`DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}`],detachConfiguration:[`DELETE /orgs/{org}/code-security/configurations/detach`],getConfiguration:[`GET /orgs/{org}/code-security/configurations/{configuration_id}`],getConfigurationForRepository:[`GET /repos/{owner}/{repo}/code-security-configuration`],getConfigurationsForEnterprise:[`GET /enterprises/{enterprise}/code-security/configurations`],getConfigurationsForOrg:[`GET /orgs/{org}/code-security/configurations`],getDefaultConfigurations:[`GET /orgs/{org}/code-security/configurations/defaults`],getDefaultConfigurationsForEnterprise:[`GET /enterprises/{enterprise}/code-security/configurations/defaults`],getRepositoriesForConfiguration:[`GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories`],getRepositoriesForEnterpriseConfiguration:[`GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories`],getSingleConfigurationForEnterprise:[`GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}`],setConfigurationAsDefault:[`PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults`],setConfigurationAsDefaultForEnterprise:[`PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults`],updateConfiguration:[`PATCH /orgs/{org}/code-security/configurations/{configuration_id}`],updateEnterpriseConfiguration:[`PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}`]},codesOfConduct:{getAllCodesOfConduct:[`GET /codes_of_conduct`],getConductCode:[`GET /codes_of_conduct/{key}`]},codespaces:{addRepositoryForSecretForAuthenticatedUser:[`PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}`],addSelectedRepoToOrgSecret:[`PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}`],checkPermissionsForDevcontainer:[`GET /repos/{owner}/{repo}/codespaces/permissions_check`],codespaceMachinesForAuthenticatedUser:[`GET /user/codespaces/{codespace_name}/machines`],createForAuthenticatedUser:[`POST /user/codespaces`],createOrUpdateOrgSecret:[`PUT /orgs/{org}/codespaces/secrets/{secret_name}`],createOrUpdateRepoSecret:[`PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}`],createOrUpdateSecretForAuthenticatedUser:[`PUT /user/codespaces/secrets/{secret_name}`],createWithPrForAuthenticatedUser:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces`],createWithRepoForAuthenticatedUser:[`POST /repos/{owner}/{repo}/codespaces`],deleteForAuthenticatedUser:[`DELETE /user/codespaces/{codespace_name}`],deleteFromOrganization:[`DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}`],deleteOrgSecret:[`DELETE /orgs/{org}/codespaces/secrets/{secret_name}`],deleteRepoSecret:[`DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}`],deleteSecretForAuthenticatedUser:[`DELETE /user/codespaces/secrets/{secret_name}`],exportForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/exports`],getCodespacesForUserInOrg:[`GET /orgs/{org}/members/{username}/codespaces`],getExportDetailsForAuthenticatedUser:[`GET /user/codespaces/{codespace_name}/exports/{export_id}`],getForAuthenticatedUser:[`GET /user/codespaces/{codespace_name}`],getOrgPublicKey:[`GET /orgs/{org}/codespaces/secrets/public-key`],getOrgSecret:[`GET /orgs/{org}/codespaces/secrets/{secret_name}`],getPublicKeyForAuthenticatedUser:[`GET /user/codespaces/secrets/public-key`],getRepoPublicKey:[`GET /repos/{owner}/{repo}/codespaces/secrets/public-key`],getRepoSecret:[`GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}`],getSecretForAuthenticatedUser:[`GET /user/codespaces/secrets/{secret_name}`],listDevcontainersInRepositoryForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces/devcontainers`],listForAuthenticatedUser:[`GET /user/codespaces`],listInOrganization:[`GET /orgs/{org}/codespaces`,{},{renamedParameters:{org_id:`org`}}],listInRepositoryForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces`],listOrgSecrets:[`GET /orgs/{org}/codespaces/secrets`],listRepoSecrets:[`GET /repos/{owner}/{repo}/codespaces/secrets`],listRepositoriesForSecretForAuthenticatedUser:[`GET /user/codespaces/secrets/{secret_name}/repositories`],listSecretsForAuthenticatedUser:[`GET /user/codespaces/secrets`],listSelectedReposForOrgSecret:[`GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories`],preFlightWithRepoForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces/new`],publishForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/publish`],removeRepositoryForSecretForAuthenticatedUser:[`DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}`],removeSelectedRepoFromOrgSecret:[`DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}`],repoMachinesForAuthenticatedUser:[`GET /repos/{owner}/{repo}/codespaces/machines`],setRepositoriesForSecretForAuthenticatedUser:[`PUT /user/codespaces/secrets/{secret_name}/repositories`],setSelectedReposForOrgSecret:[`PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories`],startForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/start`],stopForAuthenticatedUser:[`POST /user/codespaces/{codespace_name}/stop`],stopInOrganization:[`POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop`],updateForAuthenticatedUser:[`PATCH /user/codespaces/{codespace_name}`]},copilot:{addCopilotSeatsForTeams:[`POST /orgs/{org}/copilot/billing/selected_teams`],addCopilotSeatsForUsers:[`POST /orgs/{org}/copilot/billing/selected_users`],cancelCopilotSeatAssignmentForTeams:[`DELETE /orgs/{org}/copilot/billing/selected_teams`],cancelCopilotSeatAssignmentForUsers:[`DELETE /orgs/{org}/copilot/billing/selected_users`],copilotMetricsForOrganization:[`GET /orgs/{org}/copilot/metrics`],copilotMetricsForTeam:[`GET /orgs/{org}/team/{team_slug}/copilot/metrics`],getCopilotOrganizationDetails:[`GET /orgs/{org}/copilot/billing`],getCopilotSeatDetailsForUser:[`GET /orgs/{org}/members/{username}/copilot`],listCopilotSeats:[`GET /orgs/{org}/copilot/billing/seats`]},credentials:{revoke:[`POST /credentials/revoke`]},dependabot:{addSelectedRepoToOrgSecret:[`PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}`],createOrUpdateOrgSecret:[`PUT /orgs/{org}/dependabot/secrets/{secret_name}`],createOrUpdateRepoSecret:[`PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}`],deleteOrgSecret:[`DELETE /orgs/{org}/dependabot/secrets/{secret_name}`],deleteRepoSecret:[`DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}`],getAlert:[`GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}`],getOrgPublicKey:[`GET /orgs/{org}/dependabot/secrets/public-key`],getOrgSecret:[`GET /orgs/{org}/dependabot/secrets/{secret_name}`],getRepoPublicKey:[`GET /repos/{owner}/{repo}/dependabot/secrets/public-key`],getRepoSecret:[`GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}`],listAlertsForEnterprise:[`GET /enterprises/{enterprise}/dependabot/alerts`],listAlertsForOrg:[`GET /orgs/{org}/dependabot/alerts`],listAlertsForRepo:[`GET /repos/{owner}/{repo}/dependabot/alerts`],listOrgSecrets:[`GET /orgs/{org}/dependabot/secrets`],listRepoSecrets:[`GET /repos/{owner}/{repo}/dependabot/secrets`],listSelectedReposForOrgSecret:[`GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories`],removeSelectedRepoFromOrgSecret:[`DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}`],repositoryAccessForOrg:[`GET /organizations/{org}/dependabot/repository-access`],setRepositoryAccessDefaultLevel:[`PUT /organizations/{org}/dependabot/repository-access/default-level`],setSelectedReposForOrgSecret:[`PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories`],updateAlert:[`PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}`],updateRepositoryAccessForOrg:[`PATCH /organizations/{org}/dependabot/repository-access`]},dependencyGraph:{createRepositorySnapshot:[`POST /repos/{owner}/{repo}/dependency-graph/snapshots`],diffRange:[`GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}`],exportSbom:[`GET /repos/{owner}/{repo}/dependency-graph/sbom`]},emojis:{get:[`GET /emojis`]},enterpriseTeamMemberships:{add:[`PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}`],bulkAdd:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add`],bulkRemove:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove`],get:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}`],list:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships`],remove:[`DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}`]},enterpriseTeamOrganizations:{add:[`PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}`],bulkAdd:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add`],bulkRemove:[`POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove`],delete:[`DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}`],getAssignment:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}`],getAssignments:[`GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations`]},enterpriseTeams:{create:[`POST /enterprises/{enterprise}/teams`],delete:[`DELETE /enterprises/{enterprise}/teams/{team_slug}`],get:[`GET /enterprises/{enterprise}/teams/{team_slug}`],list:[`GET /enterprises/{enterprise}/teams`],update:[`PATCH /enterprises/{enterprise}/teams/{team_slug}`]},gists:{checkIsStarred:[`GET /gists/{gist_id}/star`],create:[`POST /gists`],createComment:[`POST /gists/{gist_id}/comments`],delete:[`DELETE /gists/{gist_id}`],deleteComment:[`DELETE /gists/{gist_id}/comments/{comment_id}`],fork:[`POST /gists/{gist_id}/forks`],get:[`GET /gists/{gist_id}`],getComment:[`GET /gists/{gist_id}/comments/{comment_id}`],getRevision:[`GET /gists/{gist_id}/{sha}`],list:[`GET /gists`],listComments:[`GET /gists/{gist_id}/comments`],listCommits:[`GET /gists/{gist_id}/commits`],listForUser:[`GET /users/{username}/gists`],listForks:[`GET /gists/{gist_id}/forks`],listPublic:[`GET /gists/public`],listStarred:[`GET /gists/starred`],star:[`PUT /gists/{gist_id}/star`],unstar:[`DELETE /gists/{gist_id}/star`],update:[`PATCH /gists/{gist_id}`],updateComment:[`PATCH /gists/{gist_id}/comments/{comment_id}`]},git:{createBlob:[`POST /repos/{owner}/{repo}/git/blobs`],createCommit:[`POST /repos/{owner}/{repo}/git/commits`],createRef:[`POST /repos/{owner}/{repo}/git/refs`],createTag:[`POST /repos/{owner}/{repo}/git/tags`],createTree:[`POST /repos/{owner}/{repo}/git/trees`],deleteRef:[`DELETE /repos/{owner}/{repo}/git/refs/{ref}`],getBlob:[`GET /repos/{owner}/{repo}/git/blobs/{file_sha}`],getCommit:[`GET /repos/{owner}/{repo}/git/commits/{commit_sha}`],getRef:[`GET /repos/{owner}/{repo}/git/ref/{ref}`],getTag:[`GET /repos/{owner}/{repo}/git/tags/{tag_sha}`],getTree:[`GET /repos/{owner}/{repo}/git/trees/{tree_sha}`],listMatchingRefs:[`GET /repos/{owner}/{repo}/git/matching-refs/{ref}`],updateRef:[`PATCH /repos/{owner}/{repo}/git/refs/{ref}`]},gitignore:{getAllTemplates:[`GET /gitignore/templates`],getTemplate:[`GET /gitignore/templates/{name}`]},hostedCompute:{createNetworkConfigurationForOrg:[`POST /orgs/{org}/settings/network-configurations`],deleteNetworkConfigurationFromOrg:[`DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}`],getNetworkConfigurationForOrg:[`GET /orgs/{org}/settings/network-configurations/{network_configuration_id}`],getNetworkSettingsForOrg:[`GET /orgs/{org}/settings/network-settings/{network_settings_id}`],listNetworkConfigurationsForOrg:[`GET /orgs/{org}/settings/network-configurations`],updateNetworkConfigurationForOrg:[`PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}`]},interactions:{getRestrictionsForAuthenticatedUser:[`GET /user/interaction-limits`],getRestrictionsForOrg:[`GET /orgs/{org}/interaction-limits`],getRestrictionsForRepo:[`GET /repos/{owner}/{repo}/interaction-limits`],getRestrictionsForYourPublicRepos:[`GET /user/interaction-limits`,{},{renamed:[`interactions`,`getRestrictionsForAuthenticatedUser`]}],removeRestrictionsForAuthenticatedUser:[`DELETE /user/interaction-limits`],removeRestrictionsForOrg:[`DELETE /orgs/{org}/interaction-limits`],removeRestrictionsForRepo:[`DELETE /repos/{owner}/{repo}/interaction-limits`],removeRestrictionsForYourPublicRepos:[`DELETE /user/interaction-limits`,{},{renamed:[`interactions`,`removeRestrictionsForAuthenticatedUser`]}],setRestrictionsForAuthenticatedUser:[`PUT /user/interaction-limits`],setRestrictionsForOrg:[`PUT /orgs/{org}/interaction-limits`],setRestrictionsForRepo:[`PUT /repos/{owner}/{repo}/interaction-limits`],setRestrictionsForYourPublicRepos:[`PUT /user/interaction-limits`,{},{renamed:[`interactions`,`setRestrictionsForAuthenticatedUser`]}]},issues:{addAssignees:[`POST /repos/{owner}/{repo}/issues/{issue_number}/assignees`],addBlockedByDependency:[`POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by`],addLabels:[`POST /repos/{owner}/{repo}/issues/{issue_number}/labels`],addSubIssue:[`POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues`],checkUserCanBeAssigned:[`GET /repos/{owner}/{repo}/assignees/{assignee}`],checkUserCanBeAssignedToIssue:[`GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}`],create:[`POST /repos/{owner}/{repo}/issues`],createComment:[`POST /repos/{owner}/{repo}/issues/{issue_number}/comments`],createLabel:[`POST /repos/{owner}/{repo}/labels`],createMilestone:[`POST /repos/{owner}/{repo}/milestones`],deleteComment:[`DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}`],deleteLabel:[`DELETE /repos/{owner}/{repo}/labels/{name}`],deleteMilestone:[`DELETE /repos/{owner}/{repo}/milestones/{milestone_number}`],get:[`GET /repos/{owner}/{repo}/issues/{issue_number}`],getComment:[`GET /repos/{owner}/{repo}/issues/comments/{comment_id}`],getEvent:[`GET /repos/{owner}/{repo}/issues/events/{event_id}`],getLabel:[`GET /repos/{owner}/{repo}/labels/{name}`],getMilestone:[`GET /repos/{owner}/{repo}/milestones/{milestone_number}`],getParent:[`GET /repos/{owner}/{repo}/issues/{issue_number}/parent`],list:[`GET /issues`],listAssignees:[`GET /repos/{owner}/{repo}/assignees`],listComments:[`GET /repos/{owner}/{repo}/issues/{issue_number}/comments`],listCommentsForRepo:[`GET /repos/{owner}/{repo}/issues/comments`],listDependenciesBlockedBy:[`GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by`],listDependenciesBlocking:[`GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking`],listEvents:[`GET /repos/{owner}/{repo}/issues/{issue_number}/events`],listEventsForRepo:[`GET /repos/{owner}/{repo}/issues/events`],listEventsForTimeline:[`GET /repos/{owner}/{repo}/issues/{issue_number}/timeline`],listForAuthenticatedUser:[`GET /user/issues`],listForOrg:[`GET /orgs/{org}/issues`],listForRepo:[`GET /repos/{owner}/{repo}/issues`],listLabelsForMilestone:[`GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels`],listLabelsForRepo:[`GET /repos/{owner}/{repo}/labels`],listLabelsOnIssue:[`GET /repos/{owner}/{repo}/issues/{issue_number}/labels`],listMilestones:[`GET /repos/{owner}/{repo}/milestones`],listSubIssues:[`GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues`],lock:[`PUT /repos/{owner}/{repo}/issues/{issue_number}/lock`],removeAllLabels:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels`],removeAssignees:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees`],removeDependencyBlockedBy:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}`],removeLabel:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}`],removeSubIssue:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue`],reprioritizeSubIssue:[`PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority`],setLabels:[`PUT /repos/{owner}/{repo}/issues/{issue_number}/labels`],unlock:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock`],update:[`PATCH /repos/{owner}/{repo}/issues/{issue_number}`],updateComment:[`PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}`],updateLabel:[`PATCH /repos/{owner}/{repo}/labels/{name}`],updateMilestone:[`PATCH /repos/{owner}/{repo}/milestones/{milestone_number}`]},licenses:{get:[`GET /licenses/{license}`],getAllCommonlyUsed:[`GET /licenses`],getForRepo:[`GET /repos/{owner}/{repo}/license`]},markdown:{render:[`POST /markdown`],renderRaw:[`POST /markdown/raw`,{headers:{"content-type":`text/plain; charset=utf-8`}}]},meta:{get:[`GET /meta`],getAllVersions:[`GET /versions`],getOctocat:[`GET /octocat`],getZen:[`GET /zen`],root:[`GET /`]},migrations:{deleteArchiveForAuthenticatedUser:[`DELETE /user/migrations/{migration_id}/archive`],deleteArchiveForOrg:[`DELETE /orgs/{org}/migrations/{migration_id}/archive`],downloadArchiveForOrg:[`GET /orgs/{org}/migrations/{migration_id}/archive`],getArchiveForAuthenticatedUser:[`GET /user/migrations/{migration_id}/archive`],getStatusForAuthenticatedUser:[`GET /user/migrations/{migration_id}`],getStatusForOrg:[`GET /orgs/{org}/migrations/{migration_id}`],listForAuthenticatedUser:[`GET /user/migrations`],listForOrg:[`GET /orgs/{org}/migrations`],listReposForAuthenticatedUser:[`GET /user/migrations/{migration_id}/repositories`],listReposForOrg:[`GET /orgs/{org}/migrations/{migration_id}/repositories`],listReposForUser:[`GET /user/migrations/{migration_id}/repositories`,{},{renamed:[`migrations`,`listReposForAuthenticatedUser`]}],startForAuthenticatedUser:[`POST /user/migrations`],startForOrg:[`POST /orgs/{org}/migrations`],unlockRepoForAuthenticatedUser:[`DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock`],unlockRepoForOrg:[`DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock`]},oidc:{getOidcCustomSubTemplateForOrg:[`GET /orgs/{org}/actions/oidc/customization/sub`],updateOidcCustomSubTemplateForOrg:[`PUT /orgs/{org}/actions/oidc/customization/sub`]},orgs:{addSecurityManagerTeam:[`PUT /orgs/{org}/security-managers/teams/{team_slug}`,{},{deprecated:`octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team`}],assignTeamToOrgRole:[`PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}`],assignUserToOrgRole:[`PUT /orgs/{org}/organization-roles/users/{username}/{role_id}`],blockUser:[`PUT /orgs/{org}/blocks/{username}`],cancelInvitation:[`DELETE /orgs/{org}/invitations/{invitation_id}`],checkBlockedUser:[`GET /orgs/{org}/blocks/{username}`],checkMembershipForUser:[`GET /orgs/{org}/members/{username}`],checkPublicMembershipForUser:[`GET /orgs/{org}/public_members/{username}`],convertMemberToOutsideCollaborator:[`PUT /orgs/{org}/outside_collaborators/{username}`],createArtifactStorageRecord:[`POST /orgs/{org}/artifacts/metadata/storage-record`],createInvitation:[`POST /orgs/{org}/invitations`],createIssueType:[`POST /orgs/{org}/issue-types`],createWebhook:[`POST /orgs/{org}/hooks`],customPropertiesForOrgsCreateOrUpdateOrganizationValues:[`PATCH /organizations/{org}/org-properties/values`],customPropertiesForOrgsGetOrganizationValues:[`GET /organizations/{org}/org-properties/values`],customPropertiesForReposCreateOrUpdateOrganizationDefinition:[`PUT /orgs/{org}/properties/schema/{custom_property_name}`],customPropertiesForReposCreateOrUpdateOrganizationDefinitions:[`PATCH /orgs/{org}/properties/schema`],customPropertiesForReposCreateOrUpdateOrganizationValues:[`PATCH /orgs/{org}/properties/values`],customPropertiesForReposDeleteOrganizationDefinition:[`DELETE /orgs/{org}/properties/schema/{custom_property_name}`],customPropertiesForReposGetOrganizationDefinition:[`GET /orgs/{org}/properties/schema/{custom_property_name}`],customPropertiesForReposGetOrganizationDefinitions:[`GET /orgs/{org}/properties/schema`],customPropertiesForReposGetOrganizationValues:[`GET /orgs/{org}/properties/values`],delete:[`DELETE /orgs/{org}`],deleteAttestationsBulk:[`POST /orgs/{org}/attestations/delete-request`],deleteAttestationsById:[`DELETE /orgs/{org}/attestations/{attestation_id}`],deleteAttestationsBySubjectDigest:[`DELETE /orgs/{org}/attestations/digest/{subject_digest}`],deleteIssueType:[`DELETE /orgs/{org}/issue-types/{issue_type_id}`],deleteWebhook:[`DELETE /orgs/{org}/hooks/{hook_id}`],disableSelectedRepositoryImmutableReleasesOrganization:[`DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}`],enableSelectedRepositoryImmutableReleasesOrganization:[`PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}`],get:[`GET /orgs/{org}`],getImmutableReleasesSettings:[`GET /orgs/{org}/settings/immutable-releases`],getImmutableReleasesSettingsRepositories:[`GET /orgs/{org}/settings/immutable-releases/repositories`],getMembershipForAuthenticatedUser:[`GET /user/memberships/orgs/{org}`],getMembershipForUser:[`GET /orgs/{org}/memberships/{username}`],getOrgRole:[`GET /orgs/{org}/organization-roles/{role_id}`],getOrgRulesetHistory:[`GET /orgs/{org}/rulesets/{ruleset_id}/history`],getOrgRulesetVersion:[`GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}`],getWebhook:[`GET /orgs/{org}/hooks/{hook_id}`],getWebhookConfigForOrg:[`GET /orgs/{org}/hooks/{hook_id}/config`],getWebhookDelivery:[`GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}`],list:[`GET /organizations`],listAppInstallations:[`GET /orgs/{org}/installations`],listArtifactStorageRecords:[`GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records`],listAttestationRepositories:[`GET /orgs/{org}/attestations/repositories`],listAttestations:[`GET /orgs/{org}/attestations/{subject_digest}`],listAttestationsBulk:[`POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}`],listBlockedUsers:[`GET /orgs/{org}/blocks`],listFailedInvitations:[`GET /orgs/{org}/failed_invitations`],listForAuthenticatedUser:[`GET /user/orgs`],listForUser:[`GET /users/{username}/orgs`],listInvitationTeams:[`GET /orgs/{org}/invitations/{invitation_id}/teams`],listIssueTypes:[`GET /orgs/{org}/issue-types`],listMembers:[`GET /orgs/{org}/members`],listMembershipsForAuthenticatedUser:[`GET /user/memberships/orgs`],listOrgRoleTeams:[`GET /orgs/{org}/organization-roles/{role_id}/teams`],listOrgRoleUsers:[`GET /orgs/{org}/organization-roles/{role_id}/users`],listOrgRoles:[`GET /orgs/{org}/organization-roles`],listOrganizationFineGrainedPermissions:[`GET /orgs/{org}/organization-fine-grained-permissions`],listOutsideCollaborators:[`GET /orgs/{org}/outside_collaborators`],listPatGrantRepositories:[`GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories`],listPatGrantRequestRepositories:[`GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories`],listPatGrantRequests:[`GET /orgs/{org}/personal-access-token-requests`],listPatGrants:[`GET /orgs/{org}/personal-access-tokens`],listPendingInvitations:[`GET /orgs/{org}/invitations`],listPublicMembers:[`GET /orgs/{org}/public_members`],listSecurityManagerTeams:[`GET /orgs/{org}/security-managers`,{},{deprecated:`octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams`}],listWebhookDeliveries:[`GET /orgs/{org}/hooks/{hook_id}/deliveries`],listWebhooks:[`GET /orgs/{org}/hooks`],pingWebhook:[`POST /orgs/{org}/hooks/{hook_id}/pings`],redeliverWebhookDelivery:[`POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts`],removeMember:[`DELETE /orgs/{org}/members/{username}`],removeMembershipForUser:[`DELETE /orgs/{org}/memberships/{username}`],removeOutsideCollaborator:[`DELETE /orgs/{org}/outside_collaborators/{username}`],removePublicMembershipForAuthenticatedUser:[`DELETE /orgs/{org}/public_members/{username}`],removeSecurityManagerTeam:[`DELETE /orgs/{org}/security-managers/teams/{team_slug}`,{},{deprecated:`octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team`}],reviewPatGrantRequest:[`POST /orgs/{org}/personal-access-token-requests/{pat_request_id}`],reviewPatGrantRequestsInBulk:[`POST /orgs/{org}/personal-access-token-requests`],revokeAllOrgRolesTeam:[`DELETE /orgs/{org}/organization-roles/teams/{team_slug}`],revokeAllOrgRolesUser:[`DELETE /orgs/{org}/organization-roles/users/{username}`],revokeOrgRoleTeam:[`DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}`],revokeOrgRoleUser:[`DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}`],setImmutableReleasesSettings:[`PUT /orgs/{org}/settings/immutable-releases`],setImmutableReleasesSettingsRepositories:[`PUT /orgs/{org}/settings/immutable-releases/repositories`],setMembershipForUser:[`PUT /orgs/{org}/memberships/{username}`],setPublicMembershipForAuthenticatedUser:[`PUT /orgs/{org}/public_members/{username}`],unblockUser:[`DELETE /orgs/{org}/blocks/{username}`],update:[`PATCH /orgs/{org}`],updateIssueType:[`PUT /orgs/{org}/issue-types/{issue_type_id}`],updateMembershipForAuthenticatedUser:[`PATCH /user/memberships/orgs/{org}`],updatePatAccess:[`POST /orgs/{org}/personal-access-tokens/{pat_id}`],updatePatAccesses:[`POST /orgs/{org}/personal-access-tokens`],updateWebhook:[`PATCH /orgs/{org}/hooks/{hook_id}`],updateWebhookConfigForOrg:[`PATCH /orgs/{org}/hooks/{hook_id}/config`]},packages:{deletePackageForAuthenticatedUser:[`DELETE /user/packages/{package_type}/{package_name}`],deletePackageForOrg:[`DELETE /orgs/{org}/packages/{package_type}/{package_name}`],deletePackageForUser:[`DELETE /users/{username}/packages/{package_type}/{package_name}`],deletePackageVersionForAuthenticatedUser:[`DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}`],deletePackageVersionForOrg:[`DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}`],deletePackageVersionForUser:[`DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}`],getAllPackageVersionsForAPackageOwnedByAnOrg:[`GET /orgs/{org}/packages/{package_type}/{package_name}/versions`,{},{renamed:[`packages`,`getAllPackageVersionsForPackageOwnedByOrg`]}],getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}/versions`,{},{renamed:[`packages`,`getAllPackageVersionsForPackageOwnedByAuthenticatedUser`]}],getAllPackageVersionsForPackageOwnedByAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}/versions`],getAllPackageVersionsForPackageOwnedByOrg:[`GET /orgs/{org}/packages/{package_type}/{package_name}/versions`],getAllPackageVersionsForPackageOwnedByUser:[`GET /users/{username}/packages/{package_type}/{package_name}/versions`],getPackageForAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}`],getPackageForOrganization:[`GET /orgs/{org}/packages/{package_type}/{package_name}`],getPackageForUser:[`GET /users/{username}/packages/{package_type}/{package_name}`],getPackageVersionForAuthenticatedUser:[`GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}`],getPackageVersionForOrganization:[`GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}`],getPackageVersionForUser:[`GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}`],listDockerMigrationConflictingPackagesForAuthenticatedUser:[`GET /user/docker/conflicts`],listDockerMigrationConflictingPackagesForOrganization:[`GET /orgs/{org}/docker/conflicts`],listDockerMigrationConflictingPackagesForUser:[`GET /users/{username}/docker/conflicts`],listPackagesForAuthenticatedUser:[`GET /user/packages`],listPackagesForOrganization:[`GET /orgs/{org}/packages`],listPackagesForUser:[`GET /users/{username}/packages`],restorePackageForAuthenticatedUser:[`POST /user/packages/{package_type}/{package_name}/restore{?token}`],restorePackageForOrg:[`POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}`],restorePackageForUser:[`POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}`],restorePackageVersionForAuthenticatedUser:[`POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore`],restorePackageVersionForOrg:[`POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore`],restorePackageVersionForUser:[`POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore`]},privateRegistries:{createOrgPrivateRegistry:[`POST /orgs/{org}/private-registries`],deleteOrgPrivateRegistry:[`DELETE /orgs/{org}/private-registries/{secret_name}`],getOrgPrivateRegistry:[`GET /orgs/{org}/private-registries/{secret_name}`],getOrgPublicKey:[`GET /orgs/{org}/private-registries/public-key`],listOrgPrivateRegistries:[`GET /orgs/{org}/private-registries`],updateOrgPrivateRegistry:[`PATCH /orgs/{org}/private-registries/{secret_name}`]},projects:{addItemForOrg:[`POST /orgs/{org}/projectsV2/{project_number}/items`],addItemForUser:[`POST /users/{username}/projectsV2/{project_number}/items`],deleteItemForOrg:[`DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}`],deleteItemForUser:[`DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}`],getFieldForOrg:[`GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}`],getFieldForUser:[`GET /users/{username}/projectsV2/{project_number}/fields/{field_id}`],getForOrg:[`GET /orgs/{org}/projectsV2/{project_number}`],getForUser:[`GET /users/{username}/projectsV2/{project_number}`],getOrgItem:[`GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}`],getUserItem:[`GET /users/{username}/projectsV2/{project_number}/items/{item_id}`],listFieldsForOrg:[`GET /orgs/{org}/projectsV2/{project_number}/fields`],listFieldsForUser:[`GET /users/{username}/projectsV2/{project_number}/fields`],listForOrg:[`GET /orgs/{org}/projectsV2`],listForUser:[`GET /users/{username}/projectsV2`],listItemsForOrg:[`GET /orgs/{org}/projectsV2/{project_number}/items`],listItemsForUser:[`GET /users/{username}/projectsV2/{project_number}/items`],updateItemForOrg:[`PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}`],updateItemForUser:[`PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}`]},pulls:{checkIfMerged:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/merge`],create:[`POST /repos/{owner}/{repo}/pulls`],createReplyForReviewComment:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies`],createReview:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews`],createReviewComment:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/comments`],deletePendingReview:[`DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}`],deleteReviewComment:[`DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}`],dismissReview:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals`],get:[`GET /repos/{owner}/{repo}/pulls/{pull_number}`],getReview:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}`],getReviewComment:[`GET /repos/{owner}/{repo}/pulls/comments/{comment_id}`],list:[`GET /repos/{owner}/{repo}/pulls`],listCommentsForReview:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments`],listCommits:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/commits`],listFiles:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/files`],listRequestedReviewers:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`],listReviewComments:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/comments`],listReviewCommentsForRepo:[`GET /repos/{owner}/{repo}/pulls/comments`],listReviews:[`GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews`],merge:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge`],removeRequestedReviewers:[`DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`],requestReviewers:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`],submitReview:[`POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events`],update:[`PATCH /repos/{owner}/{repo}/pulls/{pull_number}`],updateBranch:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch`],updateReview:[`PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}`],updateReviewComment:[`PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}`]},rateLimit:{get:[`GET /rate_limit`]},reactions:{createForCommitComment:[`POST /repos/{owner}/{repo}/comments/{comment_id}/reactions`],createForIssue:[`POST /repos/{owner}/{repo}/issues/{issue_number}/reactions`],createForIssueComment:[`POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions`],createForPullRequestReviewComment:[`POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions`],createForRelease:[`POST /repos/{owner}/{repo}/releases/{release_id}/reactions`],createForTeamDiscussionCommentInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions`],createForTeamDiscussionInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions`],deleteForCommitComment:[`DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}`],deleteForIssue:[`DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}`],deleteForIssueComment:[`DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}`],deleteForPullRequestComment:[`DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}`],deleteForRelease:[`DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}`],deleteForTeamDiscussion:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}`],deleteForTeamDiscussionComment:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}`],listForCommitComment:[`GET /repos/{owner}/{repo}/comments/{comment_id}/reactions`],listForIssue:[`GET /repos/{owner}/{repo}/issues/{issue_number}/reactions`],listForIssueComment:[`GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions`],listForPullRequestReviewComment:[`GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions`],listForRelease:[`GET /repos/{owner}/{repo}/releases/{release_id}/reactions`],listForTeamDiscussionCommentInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions`],listForTeamDiscussionInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions`]},repos:{acceptInvitation:[`PATCH /user/repository_invitations/{invitation_id}`,{},{renamed:[`repos`,`acceptInvitationForAuthenticatedUser`]}],acceptInvitationForAuthenticatedUser:[`PATCH /user/repository_invitations/{invitation_id}`],addAppAccessRestrictions:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`,{},{mapToData:`apps`}],addCollaborator:[`PUT /repos/{owner}/{repo}/collaborators/{username}`],addStatusCheckContexts:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`,{},{mapToData:`contexts`}],addTeamAccessRestrictions:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`,{},{mapToData:`teams`}],addUserAccessRestrictions:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`,{},{mapToData:`users`}],cancelPagesDeployment:[`POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel`],checkAutomatedSecurityFixes:[`GET /repos/{owner}/{repo}/automated-security-fixes`],checkCollaborator:[`GET /repos/{owner}/{repo}/collaborators/{username}`],checkImmutableReleases:[`GET /repos/{owner}/{repo}/immutable-releases`],checkPrivateVulnerabilityReporting:[`GET /repos/{owner}/{repo}/private-vulnerability-reporting`],checkVulnerabilityAlerts:[`GET /repos/{owner}/{repo}/vulnerability-alerts`],codeownersErrors:[`GET /repos/{owner}/{repo}/codeowners/errors`],compareCommits:[`GET /repos/{owner}/{repo}/compare/{base}...{head}`],compareCommitsWithBasehead:[`GET /repos/{owner}/{repo}/compare/{basehead}`],createAttestation:[`POST /repos/{owner}/{repo}/attestations`],createAutolink:[`POST /repos/{owner}/{repo}/autolinks`],createCommitComment:[`POST /repos/{owner}/{repo}/commits/{commit_sha}/comments`],createCommitSignatureProtection:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures`],createCommitStatus:[`POST /repos/{owner}/{repo}/statuses/{sha}`],createDeployKey:[`POST /repos/{owner}/{repo}/keys`],createDeployment:[`POST /repos/{owner}/{repo}/deployments`],createDeploymentBranchPolicy:[`POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies`],createDeploymentProtectionRule:[`POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules`],createDeploymentStatus:[`POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses`],createDispatchEvent:[`POST /repos/{owner}/{repo}/dispatches`],createForAuthenticatedUser:[`POST /user/repos`],createFork:[`POST /repos/{owner}/{repo}/forks`],createInOrg:[`POST /orgs/{org}/repos`],createOrUpdateEnvironment:[`PUT /repos/{owner}/{repo}/environments/{environment_name}`],createOrUpdateFileContents:[`PUT /repos/{owner}/{repo}/contents/{path}`],createOrgRuleset:[`POST /orgs/{org}/rulesets`],createPagesDeployment:[`POST /repos/{owner}/{repo}/pages/deployments`],createPagesSite:[`POST /repos/{owner}/{repo}/pages`],createRelease:[`POST /repos/{owner}/{repo}/releases`],createRepoRuleset:[`POST /repos/{owner}/{repo}/rulesets`],createUsingTemplate:[`POST /repos/{template_owner}/{template_repo}/generate`],createWebhook:[`POST /repos/{owner}/{repo}/hooks`],customPropertiesForReposCreateOrUpdateRepositoryValues:[`PATCH /repos/{owner}/{repo}/properties/values`],customPropertiesForReposGetRepositoryValues:[`GET /repos/{owner}/{repo}/properties/values`],declineInvitation:[`DELETE /user/repository_invitations/{invitation_id}`,{},{renamed:[`repos`,`declineInvitationForAuthenticatedUser`]}],declineInvitationForAuthenticatedUser:[`DELETE /user/repository_invitations/{invitation_id}`],delete:[`DELETE /repos/{owner}/{repo}`],deleteAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions`],deleteAdminBranchProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins`],deleteAnEnvironment:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}`],deleteAutolink:[`DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}`],deleteBranchProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection`],deleteCommitComment:[`DELETE /repos/{owner}/{repo}/comments/{comment_id}`],deleteCommitSignatureProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures`],deleteDeployKey:[`DELETE /repos/{owner}/{repo}/keys/{key_id}`],deleteDeployment:[`DELETE /repos/{owner}/{repo}/deployments/{deployment_id}`],deleteDeploymentBranchPolicy:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}`],deleteFile:[`DELETE /repos/{owner}/{repo}/contents/{path}`],deleteInvitation:[`DELETE /repos/{owner}/{repo}/invitations/{invitation_id}`],deleteOrgRuleset:[`DELETE /orgs/{org}/rulesets/{ruleset_id}`],deletePagesSite:[`DELETE /repos/{owner}/{repo}/pages`],deletePullRequestReviewProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews`],deleteRelease:[`DELETE /repos/{owner}/{repo}/releases/{release_id}`],deleteReleaseAsset:[`DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}`],deleteRepoRuleset:[`DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}`],deleteWebhook:[`DELETE /repos/{owner}/{repo}/hooks/{hook_id}`],disableAutomatedSecurityFixes:[`DELETE /repos/{owner}/{repo}/automated-security-fixes`],disableDeploymentProtectionRule:[`DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}`],disableImmutableReleases:[`DELETE /repos/{owner}/{repo}/immutable-releases`],disablePrivateVulnerabilityReporting:[`DELETE /repos/{owner}/{repo}/private-vulnerability-reporting`],disableVulnerabilityAlerts:[`DELETE /repos/{owner}/{repo}/vulnerability-alerts`],downloadArchive:[`GET /repos/{owner}/{repo}/zipball/{ref}`,{},{renamed:[`repos`,`downloadZipballArchive`]}],downloadTarballArchive:[`GET /repos/{owner}/{repo}/tarball/{ref}`],downloadZipballArchive:[`GET /repos/{owner}/{repo}/zipball/{ref}`],enableAutomatedSecurityFixes:[`PUT /repos/{owner}/{repo}/automated-security-fixes`],enableImmutableReleases:[`PUT /repos/{owner}/{repo}/immutable-releases`],enablePrivateVulnerabilityReporting:[`PUT /repos/{owner}/{repo}/private-vulnerability-reporting`],enableVulnerabilityAlerts:[`PUT /repos/{owner}/{repo}/vulnerability-alerts`],generateReleaseNotes:[`POST /repos/{owner}/{repo}/releases/generate-notes`],get:[`GET /repos/{owner}/{repo}`],getAccessRestrictions:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions`],getAdminBranchProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins`],getAllDeploymentProtectionRules:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules`],getAllEnvironments:[`GET /repos/{owner}/{repo}/environments`],getAllStatusCheckContexts:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`],getAllTopics:[`GET /repos/{owner}/{repo}/topics`],getAppsWithAccessToProtectedBranch:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`],getAutolink:[`GET /repos/{owner}/{repo}/autolinks/{autolink_id}`],getBranch:[`GET /repos/{owner}/{repo}/branches/{branch}`],getBranchProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection`],getBranchRules:[`GET /repos/{owner}/{repo}/rules/branches/{branch}`],getClones:[`GET /repos/{owner}/{repo}/traffic/clones`],getCodeFrequencyStats:[`GET /repos/{owner}/{repo}/stats/code_frequency`],getCollaboratorPermissionLevel:[`GET /repos/{owner}/{repo}/collaborators/{username}/permission`],getCombinedStatusForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/status`],getCommit:[`GET /repos/{owner}/{repo}/commits/{ref}`],getCommitActivityStats:[`GET /repos/{owner}/{repo}/stats/commit_activity`],getCommitComment:[`GET /repos/{owner}/{repo}/comments/{comment_id}`],getCommitSignatureProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures`],getCommunityProfileMetrics:[`GET /repos/{owner}/{repo}/community/profile`],getContent:[`GET /repos/{owner}/{repo}/contents/{path}`],getContributorsStats:[`GET /repos/{owner}/{repo}/stats/contributors`],getCustomDeploymentProtectionRule:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}`],getDeployKey:[`GET /repos/{owner}/{repo}/keys/{key_id}`],getDeployment:[`GET /repos/{owner}/{repo}/deployments/{deployment_id}`],getDeploymentBranchPolicy:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}`],getDeploymentStatus:[`GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}`],getEnvironment:[`GET /repos/{owner}/{repo}/environments/{environment_name}`],getLatestPagesBuild:[`GET /repos/{owner}/{repo}/pages/builds/latest`],getLatestRelease:[`GET /repos/{owner}/{repo}/releases/latest`],getOrgRuleSuite:[`GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}`],getOrgRuleSuites:[`GET /orgs/{org}/rulesets/rule-suites`],getOrgRuleset:[`GET /orgs/{org}/rulesets/{ruleset_id}`],getOrgRulesets:[`GET /orgs/{org}/rulesets`],getPages:[`GET /repos/{owner}/{repo}/pages`],getPagesBuild:[`GET /repos/{owner}/{repo}/pages/builds/{build_id}`],getPagesDeployment:[`GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}`],getPagesHealthCheck:[`GET /repos/{owner}/{repo}/pages/health`],getParticipationStats:[`GET /repos/{owner}/{repo}/stats/participation`],getPullRequestReviewProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews`],getPunchCardStats:[`GET /repos/{owner}/{repo}/stats/punch_card`],getReadme:[`GET /repos/{owner}/{repo}/readme`],getReadmeInDirectory:[`GET /repos/{owner}/{repo}/readme/{dir}`],getRelease:[`GET /repos/{owner}/{repo}/releases/{release_id}`],getReleaseAsset:[`GET /repos/{owner}/{repo}/releases/assets/{asset_id}`],getReleaseByTag:[`GET /repos/{owner}/{repo}/releases/tags/{tag}`],getRepoRuleSuite:[`GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}`],getRepoRuleSuites:[`GET /repos/{owner}/{repo}/rulesets/rule-suites`],getRepoRuleset:[`GET /repos/{owner}/{repo}/rulesets/{ruleset_id}`],getRepoRulesetHistory:[`GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history`],getRepoRulesetVersion:[`GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}`],getRepoRulesets:[`GET /repos/{owner}/{repo}/rulesets`],getStatusChecksProtection:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`],getTeamsWithAccessToProtectedBranch:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`],getTopPaths:[`GET /repos/{owner}/{repo}/traffic/popular/paths`],getTopReferrers:[`GET /repos/{owner}/{repo}/traffic/popular/referrers`],getUsersWithAccessToProtectedBranch:[`GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`],getViews:[`GET /repos/{owner}/{repo}/traffic/views`],getWebhook:[`GET /repos/{owner}/{repo}/hooks/{hook_id}`],getWebhookConfigForRepo:[`GET /repos/{owner}/{repo}/hooks/{hook_id}/config`],getWebhookDelivery:[`GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}`],listActivities:[`GET /repos/{owner}/{repo}/activity`],listAttestations:[`GET /repos/{owner}/{repo}/attestations/{subject_digest}`],listAutolinks:[`GET /repos/{owner}/{repo}/autolinks`],listBranches:[`GET /repos/{owner}/{repo}/branches`],listBranchesForHeadCommit:[`GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head`],listCollaborators:[`GET /repos/{owner}/{repo}/collaborators`],listCommentsForCommit:[`GET /repos/{owner}/{repo}/commits/{commit_sha}/comments`],listCommitCommentsForRepo:[`GET /repos/{owner}/{repo}/comments`],listCommitStatusesForRef:[`GET /repos/{owner}/{repo}/commits/{ref}/statuses`],listCommits:[`GET /repos/{owner}/{repo}/commits`],listContributors:[`GET /repos/{owner}/{repo}/contributors`],listCustomDeploymentRuleIntegrations:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps`],listDeployKeys:[`GET /repos/{owner}/{repo}/keys`],listDeploymentBranchPolicies:[`GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies`],listDeploymentStatuses:[`GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses`],listDeployments:[`GET /repos/{owner}/{repo}/deployments`],listForAuthenticatedUser:[`GET /user/repos`],listForOrg:[`GET /orgs/{org}/repos`],listForUser:[`GET /users/{username}/repos`],listForks:[`GET /repos/{owner}/{repo}/forks`],listInvitations:[`GET /repos/{owner}/{repo}/invitations`],listInvitationsForAuthenticatedUser:[`GET /user/repository_invitations`],listLanguages:[`GET /repos/{owner}/{repo}/languages`],listPagesBuilds:[`GET /repos/{owner}/{repo}/pages/builds`],listPublic:[`GET /repositories`],listPullRequestsAssociatedWithCommit:[`GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls`],listReleaseAssets:[`GET /repos/{owner}/{repo}/releases/{release_id}/assets`],listReleases:[`GET /repos/{owner}/{repo}/releases`],listTags:[`GET /repos/{owner}/{repo}/tags`],listTeams:[`GET /repos/{owner}/{repo}/teams`],listWebhookDeliveries:[`GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries`],listWebhooks:[`GET /repos/{owner}/{repo}/hooks`],merge:[`POST /repos/{owner}/{repo}/merges`],mergeUpstream:[`POST /repos/{owner}/{repo}/merge-upstream`],pingWebhook:[`POST /repos/{owner}/{repo}/hooks/{hook_id}/pings`],redeliverWebhookDelivery:[`POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts`],removeAppAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`,{},{mapToData:`apps`}],removeCollaborator:[`DELETE /repos/{owner}/{repo}/collaborators/{username}`],removeStatusCheckContexts:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`,{},{mapToData:`contexts`}],removeStatusCheckProtection:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`],removeTeamAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`,{},{mapToData:`teams`}],removeUserAccessRestrictions:[`DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`,{},{mapToData:`users`}],renameBranch:[`POST /repos/{owner}/{repo}/branches/{branch}/rename`],replaceAllTopics:[`PUT /repos/{owner}/{repo}/topics`],requestPagesBuild:[`POST /repos/{owner}/{repo}/pages/builds`],setAdminBranchProtection:[`POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins`],setAppAccessRestrictions:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps`,{},{mapToData:`apps`}],setStatusCheckContexts:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts`,{},{mapToData:`contexts`}],setTeamAccessRestrictions:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams`,{},{mapToData:`teams`}],setUserAccessRestrictions:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users`,{},{mapToData:`users`}],testPushWebhook:[`POST /repos/{owner}/{repo}/hooks/{hook_id}/tests`],transfer:[`POST /repos/{owner}/{repo}/transfer`],update:[`PATCH /repos/{owner}/{repo}`],updateBranchProtection:[`PUT /repos/{owner}/{repo}/branches/{branch}/protection`],updateCommitComment:[`PATCH /repos/{owner}/{repo}/comments/{comment_id}`],updateDeploymentBranchPolicy:[`PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}`],updateInformationAboutPagesSite:[`PUT /repos/{owner}/{repo}/pages`],updateInvitation:[`PATCH /repos/{owner}/{repo}/invitations/{invitation_id}`],updateOrgRuleset:[`PUT /orgs/{org}/rulesets/{ruleset_id}`],updatePullRequestReviewProtection:[`PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews`],updateRelease:[`PATCH /repos/{owner}/{repo}/releases/{release_id}`],updateReleaseAsset:[`PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}`],updateRepoRuleset:[`PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}`],updateStatusCheckPotection:[`PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`,{},{renamed:[`repos`,`updateStatusCheckProtection`]}],updateStatusCheckProtection:[`PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks`],updateWebhook:[`PATCH /repos/{owner}/{repo}/hooks/{hook_id}`],updateWebhookConfigForRepo:[`PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config`],uploadReleaseAsset:[`POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}`,{baseUrl:`https://uploads.github.com`}]},search:{code:[`GET /search/code`],commits:[`GET /search/commits`],issuesAndPullRequests:[`GET /search/issues`],labels:[`GET /search/labels`],repos:[`GET /search/repositories`],topics:[`GET /search/topics`],users:[`GET /search/users`]},secretScanning:{createPushProtectionBypass:[`POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses`],getAlert:[`GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}`],getScanHistory:[`GET /repos/{owner}/{repo}/secret-scanning/scan-history`],listAlertsForOrg:[`GET /orgs/{org}/secret-scanning/alerts`],listAlertsForRepo:[`GET /repos/{owner}/{repo}/secret-scanning/alerts`],listLocationsForAlert:[`GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations`],listOrgPatternConfigs:[`GET /orgs/{org}/secret-scanning/pattern-configurations`],updateAlert:[`PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}`],updateOrgPatternConfigs:[`PATCH /orgs/{org}/secret-scanning/pattern-configurations`]},securityAdvisories:{createFork:[`POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks`],createPrivateVulnerabilityReport:[`POST /repos/{owner}/{repo}/security-advisories/reports`],createRepositoryAdvisory:[`POST /repos/{owner}/{repo}/security-advisories`],createRepositoryAdvisoryCveRequest:[`POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve`],getGlobalAdvisory:[`GET /advisories/{ghsa_id}`],getRepositoryAdvisory:[`GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}`],listGlobalAdvisories:[`GET /advisories`],listOrgRepositoryAdvisories:[`GET /orgs/{org}/security-advisories`],listRepositoryAdvisories:[`GET /repos/{owner}/{repo}/security-advisories`],updateRepositoryAdvisory:[`PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}`]},teams:{addOrUpdateMembershipForUserInOrg:[`PUT /orgs/{org}/teams/{team_slug}/memberships/{username}`],addOrUpdateRepoPermissionsInOrg:[`PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}`],checkPermissionsForRepoInOrg:[`GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}`],create:[`POST /orgs/{org}/teams`],createDiscussionCommentInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments`],createDiscussionInOrg:[`POST /orgs/{org}/teams/{team_slug}/discussions`],deleteDiscussionCommentInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}`],deleteDiscussionInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}`],deleteInOrg:[`DELETE /orgs/{org}/teams/{team_slug}`],getByName:[`GET /orgs/{org}/teams/{team_slug}`],getDiscussionCommentInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}`],getDiscussionInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}`],getMembershipForUserInOrg:[`GET /orgs/{org}/teams/{team_slug}/memberships/{username}`],list:[`GET /orgs/{org}/teams`],listChildInOrg:[`GET /orgs/{org}/teams/{team_slug}/teams`],listDiscussionCommentsInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments`],listDiscussionsInOrg:[`GET /orgs/{org}/teams/{team_slug}/discussions`],listForAuthenticatedUser:[`GET /user/teams`],listMembersInOrg:[`GET /orgs/{org}/teams/{team_slug}/members`],listPendingInvitationsInOrg:[`GET /orgs/{org}/teams/{team_slug}/invitations`],listReposInOrg:[`GET /orgs/{org}/teams/{team_slug}/repos`],removeMembershipForUserInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}`],removeRepoInOrg:[`DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}`],updateDiscussionCommentInOrg:[`PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}`],updateDiscussionInOrg:[`PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}`],updateInOrg:[`PATCH /orgs/{org}/teams/{team_slug}`]},users:{addEmailForAuthenticated:[`POST /user/emails`,{},{renamed:[`users`,`addEmailForAuthenticatedUser`]}],addEmailForAuthenticatedUser:[`POST /user/emails`],addSocialAccountForAuthenticatedUser:[`POST /user/social_accounts`],block:[`PUT /user/blocks/{username}`],checkBlocked:[`GET /user/blocks/{username}`],checkFollowingForUser:[`GET /users/{username}/following/{target_user}`],checkPersonIsFollowedByAuthenticated:[`GET /user/following/{username}`],createGpgKeyForAuthenticated:[`POST /user/gpg_keys`,{},{renamed:[`users`,`createGpgKeyForAuthenticatedUser`]}],createGpgKeyForAuthenticatedUser:[`POST /user/gpg_keys`],createPublicSshKeyForAuthenticated:[`POST /user/keys`,{},{renamed:[`users`,`createPublicSshKeyForAuthenticatedUser`]}],createPublicSshKeyForAuthenticatedUser:[`POST /user/keys`],createSshSigningKeyForAuthenticatedUser:[`POST /user/ssh_signing_keys`],deleteAttestationsBulk:[`POST /users/{username}/attestations/delete-request`],deleteAttestationsById:[`DELETE /users/{username}/attestations/{attestation_id}`],deleteAttestationsBySubjectDigest:[`DELETE /users/{username}/attestations/digest/{subject_digest}`],deleteEmailForAuthenticated:[`DELETE /user/emails`,{},{renamed:[`users`,`deleteEmailForAuthenticatedUser`]}],deleteEmailForAuthenticatedUser:[`DELETE /user/emails`],deleteGpgKeyForAuthenticated:[`DELETE /user/gpg_keys/{gpg_key_id}`,{},{renamed:[`users`,`deleteGpgKeyForAuthenticatedUser`]}],deleteGpgKeyForAuthenticatedUser:[`DELETE /user/gpg_keys/{gpg_key_id}`],deletePublicSshKeyForAuthenticated:[`DELETE /user/keys/{key_id}`,{},{renamed:[`users`,`deletePublicSshKeyForAuthenticatedUser`]}],deletePublicSshKeyForAuthenticatedUser:[`DELETE /user/keys/{key_id}`],deleteSocialAccountForAuthenticatedUser:[`DELETE /user/social_accounts`],deleteSshSigningKeyForAuthenticatedUser:[`DELETE /user/ssh_signing_keys/{ssh_signing_key_id}`],follow:[`PUT /user/following/{username}`],getAuthenticated:[`GET /user`],getById:[`GET /user/{account_id}`],getByUsername:[`GET /users/{username}`],getContextForUser:[`GET /users/{username}/hovercard`],getGpgKeyForAuthenticated:[`GET /user/gpg_keys/{gpg_key_id}`,{},{renamed:[`users`,`getGpgKeyForAuthenticatedUser`]}],getGpgKeyForAuthenticatedUser:[`GET /user/gpg_keys/{gpg_key_id}`],getPublicSshKeyForAuthenticated:[`GET /user/keys/{key_id}`,{},{renamed:[`users`,`getPublicSshKeyForAuthenticatedUser`]}],getPublicSshKeyForAuthenticatedUser:[`GET /user/keys/{key_id}`],getSshSigningKeyForAuthenticatedUser:[`GET /user/ssh_signing_keys/{ssh_signing_key_id}`],list:[`GET /users`],listAttestations:[`GET /users/{username}/attestations/{subject_digest}`],listAttestationsBulk:[`POST /users/{username}/attestations/bulk-list{?per_page,before,after}`],listBlockedByAuthenticated:[`GET /user/blocks`,{},{renamed:[`users`,`listBlockedByAuthenticatedUser`]}],listBlockedByAuthenticatedUser:[`GET /user/blocks`],listEmailsForAuthenticated:[`GET /user/emails`,{},{renamed:[`users`,`listEmailsForAuthenticatedUser`]}],listEmailsForAuthenticatedUser:[`GET /user/emails`],listFollowedByAuthenticated:[`GET /user/following`,{},{renamed:[`users`,`listFollowedByAuthenticatedUser`]}],listFollowedByAuthenticatedUser:[`GET /user/following`],listFollowersForAuthenticatedUser:[`GET /user/followers`],listFollowersForUser:[`GET /users/{username}/followers`],listFollowingForUser:[`GET /users/{username}/following`],listGpgKeysForAuthenticated:[`GET /user/gpg_keys`,{},{renamed:[`users`,`listGpgKeysForAuthenticatedUser`]}],listGpgKeysForAuthenticatedUser:[`GET /user/gpg_keys`],listGpgKeysForUser:[`GET /users/{username}/gpg_keys`],listPublicEmailsForAuthenticated:[`GET /user/public_emails`,{},{renamed:[`users`,`listPublicEmailsForAuthenticatedUser`]}],listPublicEmailsForAuthenticatedUser:[`GET /user/public_emails`],listPublicKeysForUser:[`GET /users/{username}/keys`],listPublicSshKeysForAuthenticated:[`GET /user/keys`,{},{renamed:[`users`,`listPublicSshKeysForAuthenticatedUser`]}],listPublicSshKeysForAuthenticatedUser:[`GET /user/keys`],listSocialAccountsForAuthenticatedUser:[`GET /user/social_accounts`],listSocialAccountsForUser:[`GET /users/{username}/social_accounts`],listSshSigningKeysForAuthenticatedUser:[`GET /user/ssh_signing_keys`],listSshSigningKeysForUser:[`GET /users/{username}/ssh_signing_keys`],setPrimaryEmailVisibilityForAuthenticated:[`PATCH /user/email/visibility`,{},{renamed:[`users`,`setPrimaryEmailVisibilityForAuthenticatedUser`]}],setPrimaryEmailVisibilityForAuthenticatedUser:[`PATCH /user/email/visibility`],unblock:[`DELETE /user/blocks/{username}`],unfollow:[`DELETE /user/following/{username}`],updateAuthenticated:[`PATCH /user`]}};const G=new Map;for(let[e,t]of Object.entries(Ia))for(let[n,r]of Object.entries(t)){let[t,i,a]=r,[o,s]=t.split(/ /),c=Object.assign({method:o,url:s},i);G.has(e)||G.set(e,new Map),G.get(e).set(n,{scope:e,methodName:n,endpointDefaults:c,decorations:a})}const La={has({scope:e},t){return G.get(e).has(t)},getOwnPropertyDescriptor(e,t){return{value:this.get(e,t),configurable:!0,writable:!0,enumerable:!0}},defineProperty(e,t,n){return Object.defineProperty(e.cache,t,n),!0},deleteProperty(e,t){return delete e.cache[t],!0},ownKeys({scope:e}){return[...G.get(e).keys()]},set(e,t,n){return e.cache[t]=n},get({octokit:e,scope:t,cache:n},r){if(n[r])return n[r];let i=G.get(t).get(r);if(!i)return;let{endpointDefaults:a,decorations:o}=i;return n[r]=o?za(e,t,r,a,o):e.request.defaults(a),n[r]}};function Ra(e){let t={};for(let n of G.keys())t[n]=new Proxy({octokit:e,scope:n,cache:{}},La);return t}function za(e,t,n,r,i){let a=e.request.defaults(r);function o(...r){let o=a.endpoint.merge(...r);if(i.mapToData)return o=Object.assign({},o,{data:o[i.mapToData],[i.mapToData]:void 0}),a(o);if(i.renamed){let[r,a]=i.renamed;e.log.warn(`octokit.${t}.${n}() has been renamed to octokit.${r}.${a}()`)}if(i.deprecated&&e.log.warn(i.deprecated),i.renamedParameters){let o=a.endpoint.merge(...r);for(let[r,a]of Object.entries(i.renamedParameters))r in o&&(e.log.warn(`"${r}" parameter is deprecated for "octokit.${t}.${n}()". Use "${a}" instead`),a in o||(o[a]=o[r]),delete o[r]);return a(o)}return a(...r)}return Object.assign(o,a)}function Ba(e){let t=Ra(e);return{...t,rest:t}}Ba.VERSION=`17.0.0`;const K=Oa.plugin(ka,Ba,Fa).defaults({userAgent:`octokit-rest.js/22.0.1`});function Va(e){let t=e?.cause;if(typeof t?.code==`string`)return t.code;let n=e?.code;return typeof n==`string`?n:void 0}const Ha=[`CERT`,`SELF_SIGNED`,`SIGNATURE`,`ISSUER`];function Ua(e,t){let n=Va(e);if(n&&Ha.some(e=>n.includes(e)))return{kind:`tls`,message:`Could not verify the TLS certificate for ${t}. If this is a GitHub Enterprise Server with a self-signed or internal-CA certificate, add its CA to your system trust store (macOS Keychain, Windows certificate store, or your distro's ca-certificates).`};let r=e?.status;return r===401?{kind:`token`,message:`Token invalid for ${t}`}:r===403?{kind:`token`,message:`Token rejected by ${t} — check that it has the repo and read:user scopes, and that it is authorized for SSO if the organization requires it`}:n?{kind:`network`,message:`Could not reach ${t} (${n})`}:{kind:`token`,message:`Authentication failed for ${t}`}}async function Wa(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString(`utf8`).trim()}async function Ga(e,t,n){let{host:r,json:i}=e;W(r);let a=await(n??(()=>Yi({message:`Enter PAT:`})))();a||(process.stderr.write(`No token provided
|
|
8
|
+
`),process.exit(1));let o=r===`github.com`?void 0:`https://${r}/api/v3`,s=new K({auth:a,...o?{baseUrl:o}:{}}),c=`unknown`,l,u;try{let{data:e}=await s.users.getAuthenticated();c=e.login,l=e.name??void 0,u=e.email??void 0}catch(e){let t=Ua(e,r).message;i?process.stdout.write(`${JSON.stringify({type:`error`,message:t})}\n`):process.stderr.write(`${t}\n`),process.exit(1)}await t.set(r,c,a,{gitProtocol:`https`,name:l,email:u}),i?process.stdout.write(`${JSON.stringify({type:`complete`,host:r,login:c})}\n`):process.stderr.write(`✓ PAT stored for ${c} on ${r}\n`)}function Ka(e){return new D(`pat`).description(`Store a Personal Access Token`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSON`,!1).option(`--token-stdin`,`Read the token from stdin instead of prompting`,!1).action(async t=>{let n=t.host??Wt(process.cwd()),r=t.tokenStdin?Wa:void 0;await Ga({host:n,json:t.json},await e(),r)})}async function qa(e,t,n=Cr){let r=n(e);return r.available&&r.token?r.token:(await t.get(e))?.token??null}async function Ja(e,t){let{host:n,json:r}=e;W(n);let i=await qa(n,t);i??(process.stderr.write(`Not logged in to ${n}\n`),process.exit(1));let a=n===`github.com`?void 0:`https://${n}/api/v3`,o=new K({auth:i,...a?{baseUrl:a}:{}}),s=[];for await(let e of o.paginate.iterator(o.repos.listForAuthenticatedUser,{per_page:100,sort:`updated`}))for(let t of e.data)s.push({full_name:t.full_name,clone_url:t.clone_url,private:t.private});if(r)process.stdout.write(`${JSON.stringify({type:`repos`,host:n,repos:s})}\n`);else for(let e of s)process.stdout.write(`${e.full_name} ${e.clone_url}\n`)}function Ya(e){return new D(`repos`).description(`List accessible repositories`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSON`,!1).action(async t=>{let n=t.host??Wt(process.cwd());await Ja({...t,host:n},await e())})}async function Xa(e){let{host:t}=e,{touched:n}=await Hn(t);if(n.length===0){process.stderr.write(`Not signed in to ${t}\n`);return}process.stderr.write(`✓ Signed out from ${t}\n`),n.includes(`keychain`)&&process.stderr.write(` cleared from OS keychain
|
|
9
9
|
`),n.includes(`file`)&&process.stderr.write(` cleared from ~/.ok/auth.yml
|
|
10
|
-
`)}function Za(){return new
|
|
10
|
+
`)}function Za(){return new D(`signout`).description(`Remove stored credentials`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).action(async e=>{let t=e.host??Wt(process.cwd());await Xa({...e,host:t})})}async function Qa(e,t,n=Cr){let r=n(e);if(r.available&&r.token)return{tier:`A`,token:r.token};let i=await t.get(e);return i==null?{tier:`none`}:{tier:i.gitProtocol===`ssh`?`C`:`B`,token:i.token}}function $a(e,t,n){return{type:`status`,host:e,backend:t,...n}}async function eo(e,t){let{host:n,json:r}=e;W(n);let i=t.backend,a=await Qa(n,t);a.tier===`none`&&(r?process.stdout.write(`${JSON.stringify($a(n,i,{authenticated:!1}))}\n`):process.stderr.write(`Not logged in to ${n}\n`),process.exit(1));let o=n===`github.com`?void 0:`https://${n}/api/v3`,s=new K({auth:a.token,...o?{baseUrl:o}:{}});try{let{data:e}=await s.users.getAuthenticated();r?process.stdout.write(`${JSON.stringify($a(n,i,{authenticated:!0,tier:a.tier,login:e.login,name:e.name,email:e.email}))}\n`):process.stderr.write(`✓ Logged in as ${e.login} on ${n}\n`)}catch(e){let t=Ua(e,n);r?process.stdout.write(`${JSON.stringify($a(n,i,{authenticated:!1,error:t.message}))}\n`):process.stderr.write(`✗ ${t.message}\n`),process.exit(1)}}function to(e){return new D(`status`).description(`Show authentication status`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname (default: workspace origin host)`).option(`--json`,`Output JSON`,!1).action(async t=>{let n=t.host??Wt(process.cwd());await eo({...t,host:n},await e())})}function no(e){let t=new D(`auth`);t.description(`GitHub authentication management`);let n=e=>Rn(void 0,e);return t.addCommand(qi(n)),t.addCommand(to(n)),t.addCommand(Ya(n)),t.addCommand(Za()),t.addCommand(Ka(n)),t.addCommand(ki(n,e)),t}function ro(e,t=ni(),n=Wn){try{t===`darwin`?n(`/usr/bin/open`,[`-R`,e]):n(t===`win32`?`explorer.exe`:`xdg-open`,[P(e)])}catch{}}function io(){return new D(`bug-report`).description(`Generate a diagnostic bundle for bug reporting`).option(`--reveal`,`Reveal the bundle in your file manager (default: true)`,!0).option(`--no-reveal`,`Do not reveal the bundle in your file manager`).action(async e=>{try{let{zipPath:t,summary:n}=await nr({level:`standard`,projectDir:process.cwd(),redact:!0,outputPath:sr(),logger:zn()});process.stdout.write(`${t}\n`),n.redactedLineCount>0&&process.stderr.write(`ok bug-report: ${n.redactedLineCount} line(s) auto-redacted across ${n.redactions.length} file(s)\n`),e.reveal&&ro(t)}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`ok bug-report: failed — ${t}\n`),process.exitCode=1}})}function ao(e){let t=[];return(e.status===`dead-pid`||e.status===`corrupt`)&&t.push({name:`server`,lockPath:e.lockPath,reason:e.status}),{prune:t}}function oo(e){let t=e.inspect??(()=>mr(e.lockDir,`server`)),n=e.unlink??(e=>H(e)),r=e.log??(e=>console.log(e)),i=e.error??(e=>console.error(e)),a=ao(t());if(a.prune.length===0)return r(`No stale locks.`),{pruned:[],failed:[]};let o=[],s=[];for(let e of a.prune)try{n(e.lockPath),o.push(e)}catch(t){s.push({target:e,error:t instanceof Error?t.message:String(t)})}if(o.length>0){let e=o.map(e=>`${e.name} (${e.reason})`).join(`, `);r(`Pruned ${o.length} stale lock${o.length===1?``:`s`}: ${e}`)}return s.length>0&&i(`Failed to prune: ${s.map(({target:e,error:t})=>`${e.name} (${e.lockPath}): ${t}`).join(`; `)}`),{pruned:o,failed:s}}function so(e){return new D(`clean`).description(`Prune a stale / corrupt open-knowledge lock file (never touches live locks)`).action(()=>{e(),oo({lockDir:E(process.cwd())}).failed.length>0&&(process.exitCode=1)})}function co(e){return`credential.helper=!${e.map(o).join(` `)} auth git-credential`}async function lo(e,t,n={},r=Cr){let i=[`credential.helper=`,co(n.selfCliArgs??[`open-knowledge`])];if(!n.skipGhDetect){let t=r(e,{login:n.login});if(t.available&&t.token)return{tier:`A`,gitConfig:i,relayToken:{token:t.token,host:e,...t.resolvedLogin?{login:t.resolvedLogin}:{}}}}let a=await t.get(e);return a==null?{tier:`none`,gitConfig:[]}:{tier:a.gitProtocol===`ssh`?`C`:`B`,gitConfig:i}}async function uo(e,t,n=fetch){let r=new AbortController,i=setTimeout(()=>r.abort(),5e3);try{return(await n(`https://api.github.com/repos/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,{signal:r.signal,headers:{"User-Agent":`open-knowledge-cli`,Accept:`application/vnd.github+json`}})).status===200}catch{return!1}finally{clearTimeout(i)}}const fo=[[`count`,0,10],[`compress`,10,20],[`receiv`,20,60],[`resolv`,60,100]];function po(e){let t=/^([\w ]+):\s+(\d+)%/.exec(e.trim());if(!t)return null;let n=t[1].toLowerCase(),r=Number(t[2]);for(let[e,i,a]of fo)if(n.includes(e))return{stage:t[1],pct:Math.round(i+r/100*(a-i))};return null}function q(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}function mo(e=process.env){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t.GIT_TERMINAL_PROMPT=`0`,t.LANG=`C`,t.LC_ALL=`C`,t}function ho(e,t=process.env){let n=mo(t);return e.relayToken?(n.OK_GH_TOKEN=e.relayToken.token,n.OK_GH_TOKEN_HOST=e.relayToken.host,e.relayToken.login?n.OK_GH_TOKEN_LOGIN=e.relayToken.login:delete n.OK_GH_TOKEN_LOGIN):(delete n.OK_GH_TOKEN,delete n.OK_GH_TOKEN_HOST,delete n.OK_GH_TOKEN_LOGIN),n}function go(e=process.argv,t=process.execPath){let n=e[1];return n?[t,n]:[t]}function _o(e){return typeof e!=`string`||e.length===0?[`--progress`]:[`--progress`,`-b`,e]}const vo=ge;async function yo(e){try{return await e.clone(_o(e.branch)),{fellBack:!1}}catch(t){if(e.branch!==null&&vo(t))return e.onFallback(e.branch),await e.clone(_o(null)),{fellBack:!0};throw t}}function bo(e,t){return{baseDir:e,config:t,unsafe:{allowUnsafeCredentialHelper:!0,allowUnsafePager:!0,allowUnsafeSshCommand:!0,allowUnsafeAskPass:!0,allowUnsafeEditor:!0}}}function xo(e,t,n){return e===`https`&&t===`github.com`&&n}function So(e){if(e===void 0)return null;let{declaredLogin:t,declaredSource:n}=e,r;switch(n){case`remote-url`:r=`The clone URL names ${t}`;break;case`credential-config`:r=`Your Git credential configuration names ${t}`;break;default:r=`Your Git configuration names ${t}`}return`⚠ ${r}, but the GitHub CLI couldn't confirm that account — the clone used its active account.\n Run \`gh auth status\` to see which account that is. If ${t} is listed as active, nothing is wrong; confirming an account by name needs GitHub CLI 2.40 or newer.\n`}async function Co(e,t,n={}){let r=or(e);if(!r)throw Error(`Invalid git URL: ${Oo(e)}`);let i=ct(e,{cwd:n.cwd,_readCredentialUrlMatch:n._readCredentialUrlMatch}),a=await lo(i.host??r.hostname,t,{selfCliArgs:n.selfCliArgs,login:i.login},n._detectGhFn),o=i.login!==void 0&&a.tier===`A`&&!Mt(a.relayToken?.login,i.login)?{declaredLogin:i.login,declaredSource:i.source}:void 0;return{auth:a,...o===void 0?{}:{declaredMiss:o}}}function wo(e,t){let n=`${t.owner}/${t.name}`;return e===n||e===`${n}.git`?`https://${t.hostname}/${n}`:e}async function To(e,t,n,r=process.cwd()){let i=or(e);if(!i)throw Error(`Invalid git URL: ${Oo(e)}`);let a=wo(e,i),o=t.dir?L(r,t.dir):L(r,i.name);if(R(o)&&Xr(o).length>0)throw Error(`Target directory is not empty: ${o}`);Ke();let s=Jn(),c=i.protocol===`https`&&i.hostname===`github.com`&&await uo(i.owner,i.name),l=xo(i.protocol,i.hostname,c)?{auth:{tier:`none`,gitConfig:[]}}:await Co(a,s,{selfCliArgs:go(),cwd:r,...t._detectGhFn?{_detectGhFn:t._detectGhFn}:{}}),u=l.auth;if(t.onAuthResolved?.({tier:u.tier,login:u.relayToken?.login}),!t.json){let e=So(l.declaredMiss);e&&process.stderr.write(e)}let d=ho(u),f=bo(r,u.gitConfig),p=yt(f).env(d),m=-1;p.outputHandler((e,n,r)=>{r.on(`data`,e=>{let n=e.toString(`utf-8`);for(let e of n.split(`
|
|
11
11
|
`)){let n=po(e);n&&n.pct!==m&&(m=n.pct,q(t.json,{type:`progress`,pct:n.pct,stage:n.stage}),t.json||process.stderr.write(`\r Cloning ${n.pct}%`))}})}),await yo({branch:typeof t.branch==`string`&&t.branch.length>0?t.branch:null,clone:e=>p.clone(a,o,e),onFallback:e=>{q(t.json,{type:`branch-fallback`,branch:e}),t.json||process.stderr.write(`\n Branch '${e}' not found upstream — cloning default branch instead.\n`)}}),t.json||process.stderr.write(`
|
|
12
|
-
`);try{let{runInit:e}=await import(`./init-
|
|
12
|
+
`);try{let{runInit:e}=await import(`./init-B6J0LwAj.mjs`),n=await e({cwd:o,mcp:!1});if(n.contentUpdated.length>0){let e=`auto-init: updated ${n.contentUpdated.join(`, `)}`;t.json?q(!0,{type:`warning`,message:e}):process.stderr.write(` ${e}\n`)}}catch(e){let n=e instanceof Error?e.message:String(e);t.json?q(!0,{type:`warning`,message:`auto-init: ${n}`}):process.stderr.write(` auto-init: ${n}\n`)}try{Eo(o)}catch(e){let n=e instanceof Error?e.message:String(e);t.json?q(!0,{type:`warning`,message:`git-exclude: ${n}`}):process.stderr.write(` git-exclude: ${n}\n`)}return o}function Eo(e){let t=Ln(e,[`.ok/`]);return t.kind===`no-exclude`?`no-exclude`:t.kind===`refused-tracked`?`already-present`:t.appended.length>0?`appended`:`already-present`}const Do=/^[A-Za-z0-9._/:@-]+$/;function Oo(e){return e.replace(/^([a-z][a-z0-9+.-]*:\/\/)([^/]*)@/i,(e,t,n)=>{let r=n.indexOf(`:`),i=r===-1?n:n.slice(0,r);return i!==``&&Et(i)!==void 0?`${t}${i}@`:t})}function ko(e){return Do.test(e)?e:o(e)}function Ao(e,t){let n=typeof t==`string`&&t.length>0?` -b ${ko(t)}`:``;return`ok clone ${ko(e)}${n}`}function jo(e){let t=x(e.error);if(t.kind!==`auth`)return null;let n=Oo(e.url);if(g(t)){let t=Ao(n,e.branch);return[`✗ Couldn't clone ${n} — authentication is required.`,``,` To fix:`,` 1. Run: ok auth login`,` 2. Then re-run: ${t}`].join(`
|
|
13
13
|
`)}return t.subclass===`403`?`✗ Access denied when cloning ${n}${typeof e.principal==`string`&&e.principal.length>0?` (signed in as @${e.principal} — may lack access)`:``}. Check that your account has access to the repository.`:t.subclass===`ssh-auth`?`✗ Couldn't clone ${n} over SSH — authentication failed. Check that your SSH key is added to your GitHub account and the host key is trusted, or clone the HTTPS URL instead.`:t.subclass===`not-found-as-identity`?`✗ Repository not found when cloning ${n}. It may not exist, or the account used may not have access.${typeof e.resolvedLogin==`string`&&e.resolvedLogin.length>0?` Authenticated as ${e.resolvedLogin}.`:``}`:["✗ Your GitHub token is missing required OAuth scopes — likely the `repo` scope.",``,` To fix:`," 1. Create a token with `repo` scope at https://github.com/settings/tokens",` 2. Run: ok auth pat`,` 3. Then re-run: ${Ao(n,e.branch)}`].join(`
|
|
14
|
-
`)}function Mo(e){let t=qe(e.error instanceof Error?e.error.message:String(e.error));if(e.json){e.emit({type:`error`,message:t});return}let n=jo({error:e.error,url:e.url,branch:e.branch,principal:e.principal,resolvedLogin:e.resolvedLogin});e.printStderr(`${n??`✗ ${t}`}\n`)}async function No(e,t){let n=(await e.get(t))?.login;return n&&n!==`unknown`?n:null}async function Po(e){let t=
|
|
15
|
-
`)}function Qo(e){let t=e.skillVersion??`unknown`,n=e.recordedAt??`unknown`;return[
|
|
16
|
-
`)}function $o(e){let t=e.skillVersion?` • Skill v${e.skillVersion}`:``;return[
|
|
17
|
-
`)}function es(e){return`${M(`Error:`)} ${e.buildError??`unknown build failure`}`}async function ts(e={}){let t=await dn(e);return t.status===`failed`?{...t,message:es(t),exitCode:1}:t.status===`skip-current`?{...t,message:Qo(t),exitCode:0}:t.status===`installed`?{...t,message:$o(t),exitCode:0}:{...t,message:Zo(t),exitCode:0}}function ns(){return new O(`cowork`).description("Build openknowledge.skill and open the Claude Desktop App so you can upload it for Claude Chat & Cowork. (Advanced/rarely needed — `ok init` already wires Claude.)").option(`--out <path>`,`Custom output path (default: ~/Downloads/openknowledge.skill)`).option(`--no-open`,`Build the file but skip the OS file-association handoff`).option(`--force`,`Bypass the install-state gate and rebuild unconditionally`).action(async e=>{let t=await ts({out:e.out,noOpen:!e.open,force:e.force??!1});process.stdout.write(`${t.message}\n`),t.exitCode!==0&&process.exit(t.exitCode)})}async function rs(e,t){let n=si({input:t??process.stdin,output:process.stderr});try{let t=(await n.question(e)).trim().toLowerCase();return t===`y`||t===`yes`}finally{n.close()}}const is=/^# >>> open-knowledge cli >>>\n[\s\S]*?^# <<< open-knowledge cli <<<\n?/m;function as(e){return I(e,`Library`,`Application Support`,`OpenKnowledge`,`path-install.json`)}const os={existsSync:e=>z(e),readFileSync:(e,t)=>V(e,t),lstatSync:e=>qr(e),readlinkSync:e=>Xr(e)};function ss(e,t=os){let n=as(e);if(!t.existsSync(n))return null;try{let e=JSON.parse(t.readFileSync(n,`utf8`));return e?.version===1?e:null}catch{return null}}function cs(e){let t=e.replace(is,``);return{text:t,changed:t!==e,emptyAfter:t.trim()===``}}function ls(e,t,n=os){try{return n.lstatSync(e).isSymbolicLink()?n.readlinkSync(e)===t:!1}catch{return!1}}function us(e,t={}){if(!Number.isSafeInteger(e)||e<=0)return null;let n=t.platform??process.platform,r=t.env??process.env,i=t.run??Mr;try{let t,a={encoding:`utf8`,stdio:[`ignore`,`pipe`,`pipe`],timeout:n===`win32`?15e3:5e3,windowsHide:!0,env:{...r,LC_ALL:`C`,TZ:`UTC0`}};if(n===`win32`){let n=Object.entries(r).find(([e])=>e.toLowerCase()===`systemroot`)?.[1]?.trim();t=i(Br.join(n&&Br.isAbsolute(n)?n:`C:\\Windows`,`System32`,`WindowsPowerShell`,`v1.0`,`powershell.exe`),[`-NoLogo`,`-NoProfile`,`-NonInteractive`,`-Command`,`$ErrorActionPreference = 'Stop'; (Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('O')`],a).trim()}else if(n===`darwin`||n===`linux`){let n=i(`/bin/ps`,[`-p`,String(e),`-o`,`lstart=`],a).trim();if(!/^\w{3}\s+\w{3}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}\s+\d{4}$/.test(n))return null;t=`${n} UTC`}else return null;let o=Date.parse(t);return Number.isFinite(o)?o:null}catch{return null}}async function ds(e,t={}){let n=t.isAlive??un,r=pr(e,`server`,{isAlive:n}),i=`Quit OpenKnowledge and stop any OpenKnowledge server processes. Once you have confirmed they have exited, remove the stale lock file at ${r.lockPath} and retry cleanup.`,a=t=>(Rn()?.warn({lockDir:e,lockPath:r.lockPath,status:r.status},t),Error(t));if(r.status===`corrupt`)throw a(`Cannot verify shutdown from the unreadable server lock at ${r.lockPath}. ${i}`);if(r.status===`foreign-host`)throw a(`Cannot verify shutdown: the server lock at ${r.lockPath} belongs to another machine. Stop OpenKnowledge on the owning machine. Confirm that no OpenKnowledge server is using this directory on the owning machine or any other machine sharing it. Only then remove the stale lock file at ${r.lockPath} and retry cleanup.`);if(r.status===`alive`){let e=typeof r.lock.startedAt==`string`?Date.parse(r.lock.startedAt):NaN;if(!Number.isFinite(e))throw a(`The server lock has no valid start time. ${i}`);let o=(t.readProcessStart??us)(r.lock.pid);if(o===null){if(!n(r.lock.pid))return{stopped:0,failed:[]};let e=process.platform===`linux`?`Linux requires ps supporting -p and -o lstart= (such as procps). Install a compatible ps and retry, or stop the server manually. `:`Stop the server manually. `;throw a(`Cannot verify the identity of process ${r.lock.pid}; the OS process-start query failed or is unavailable, so it was not signalled. `+e+`Confirm the OpenKnowledge server has exited before retrying cleanup after a manual stop.`)}if(o>e)throw a(`Process ${r.lock.pid} started after the server lock was acquired; it was not signalled. ${i}`)}let o=await sr({lockDir:e,inspect:()=>r,force:!0,log:()=>{},error:()=>{}}),s=o.failed.map(e=>({pid:e.target.pid,error:e.error})),c=new Set(o.stopped.map(e=>e.pid)),l=t.timeoutMs??1e4,u=performance.now()+l;for(;c.size>0;){for(let e of c)n(e)||c.delete(e);if(c.size===0)break;let e=u-performance.now();if(e<=0)break;await oi(Math.min(t.pollIntervalMs??50,e))}for(let e of c)s.push({pid:e,error:`still running ${l}ms after SIGTERM`});return{stopped:o.stopped.length-c.size,failed:s}}function J(e,t){return e===t?`~`:e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e}function fs(e){return zr===`/`?e:e.split(zr).join(`/`)}function ps(e,t,n=`This project`){let r=[];r.push({kind:`stop-server`,group:n,label:`Stop the project server (if running)`,lockDir:D(e)});let i=new Set;for(let a of Pn){let o=Tn[a];if(!o.projectConfigPath)continue;let s=o.projectConfigPath(e);i.add(fs(L(e,s))),r.push({kind:`mcp-entry`,group:n,label:`Remove OK's MCP entry from ${o.label} (${fs(L(e,s))})`,editorId:a,scope:`project`,cwd:e,home:t,configPath:s})}r.push({kind:`launch-entry`,group:n,label:`Remove OK's entry from .claude/launch.json`,projectRoot:e}),r.push({kind:`git-exclude`,group:n,label:`Remove OK paths from .git/info/exclude`,projectRoot:e});let a=new Set([...xn(e),...gn(e),...ge]);for(let t of a){let a=t.replace(/\/$/,``);i.has(a)||a!==`.claude/launch.json`&&r.push({kind:`remove-path`,group:n,label:`Remove ${t}`,path:I(e,a),containWithin:e})}try{r.push({kind:`remove-path`,group:n,label:`Remove the OK shadow repo (.git/ok/)`,path:Ge(e)})}catch{}let o=I(e,`.ok`);return r.sort((e,t)=>Number(e.kind===`remove-path`&&e.path===o)-Number(t.kind===`remove-path`&&t.path===o)),r.map(t=>t.kind===`stop-server`?t:{...t,requiresStoppedServers:[D(e)],...t.kind===`remove-path`?{requiresSuccessfulCleanup:!0}:{}})}function ms(e,t){return{scope:`deinit`,ops:ps(e,t)}}function hs(e){let{home:t,platform:n,host:r,lockDirs:i,marker:a,recentDeinitProjectRoots:o,purgeContent:s}=e,c=[];for(let e of i)c.push({kind:`stop-server`,group:`Running servers`,label:`Stop server at ${J(I(e,`..`,`..`),t)}`,lockDir:e});c.push({kind:`keychain-token`,group:`Credentials`,label:`Remove the GitHub credential (${r}) from the OS keychain + auth.yml`,host:r}),c.push({kind:`embeddings-key`,group:`Credentials`,label:`Remove all embeddings API keys (secrets.yml)`}),c.push(..._s(a,t));for(let e of Pn){let n=Tn[e],r;try{r=n.configPath(``,t)}catch{continue}c.push({kind:`mcp-entry`,group:`Editor MCP configs`,label:`Remove OK's MCP entry from ${n.label} (${J(r,t)})`,editorId:e,scope:`user`,cwd:t,home:t,configPath:r})}for(let e of er(t))c.push({kind:`remove-path`,group:`Skill bundles`,label:`Remove ${J(e.path,t)}`,path:e.path});for(let e of o)c.push(...ps(e,t,`Project: ${Ir(e)}`));return c.push(...vs(t,n,e.env).map(e=>e.kind===`remove-path`?{...e,requiresSuccessfulCleanup:!0}:e)),c.push({kind:`remove-path`,group:`Global directory`,requiresSuccessfulCleanup:!0,label:s?`Remove ~/.ok (including user-authored skills)`:`Remove ~/.ok (keeping ~/.ok/skills)`,path:I(t,`.ok`),preserve:s?void 0:[`skills`]}),{scope:`uninstall`,ops:c}}function gs(e){return[I(e,`.zshrc`),I(e,`.bash_profile`),I(e,`.config`,`fish`,`conf.d`,`open-knowledge.fish`)]}function _s(e,t){let n=[],r=new Set([...gs(t),...e?.rcFiles??[]]);for(let e of r)kr(e).kind!==`not-present`&&n.push({kind:`shell-block`,group:`Shell PATH`,label:`Strip the OK block from ${J(e,t)}`,rcFile:e});for(let r of e?.extraSymlinks??[])n.push({kind:`extra-symlink`,group:`Shell PATH`,label:`Remove the ok symlink at ${J(r.path,t)}`,path:r.path,target:r.target});return n}function vs(e,t,n){let r={home:e,platformName:t,env:n},i=$n(r),a=_r(r),o=[{kind:`remove-path`,group:`Application data`,label:`Remove ${J(i,e)}`,path:i}];if(t===`darwin`){let t=$n({...r,productName:mr});o.push({kind:`remove-path`,group:`Application data`,label:`Remove ${J(t,e)} (only if it is OpenKnowledge's)`,path:t,requireOurState:!0})}return o.push({kind:`remove-path`,group:`Application data`,label:`Remove ${J(a,e)}`,path:a}),o}async function ys(e,t={}){let n={clearToken:t.clearToken??Vn,clearEmbeddingsKey:t.clearEmbeddingsKey??Ze,stopServer:t.stopServer??ds,env:t.env??{}},r=async e=>{try{return await xs(e,n)}catch(t){return{op:e,status:`failed`,detail:t instanceof Error?t.message:String(t)}}},i=new Map;for(let t of e.ops){if(t.kind!==`stop-server`)continue;let e=R(t.lockDir);i.has(e)||i.set(e,await r(t))}let a=[];for(let t of e.ops){if(t.kind===`stop-server`){let e=i.get(R(t.lockDir));e&&a.push({...e,op:t});continue}let e=t.requiresStoppedServers??[...i.keys()],n=e.filter(e=>{let t=i.get(R(e));return!t||t.status===`failed`});if(n.length>0){a.push({op:t,status:`failed`,detail:`left untouched because server shutdown was not verified: ${n.join(`, `)}. Stop the server and retry cleanup.`});continue}if(t.kind===`remove-path`&&t.requiresSuccessfulCleanup&&a.some(n=>n.status===`failed`?!t.requiresStoppedServers||n.op.requiresStoppedServers?.some(t=>e.includes(t)):!1)){a.push({op:t,status:`failed`,detail:`left untouched so cleanup can be retried after the earlier failures are resolved`});continue}a.push(await r(t))}return{results:a,removed:a.filter(e=>e.status===`removed`),failed:a.filter(e=>e.status===`failed`)}}async function bs(e,t=fr){let n=[];for(let r of e.ops){if(r.kind!==`stop-server`)continue;let e=await t(r.lockDir);e!==null&&e!==0&&n.push(`${e} collaboration client${e===1?``:`s`} (editor window${e===1?``:`s`} or agents) ${e===1?`is`:`are`} connected to the server at ${r.lockDir}. Those windows will stop working, and restarting will NOT recover them — this removes the project state they depend on.`)}return n}async function xs(e,t){switch(e.kind){case`stop-server`:{let{stopped:n,failed:r}=await t.stopServer(e.lockDir);return r.length>0?{op:e,status:`failed`,detail:`could not stop the server (${r.map(e=>`pid ${e.pid}: ${e.error}`).join(`; `)}); dependent files were left untouched; stop the server and retry cleanup`}:{op:e,status:n>0?`removed`:`not-present`}}case`keychain-token`:{let{touched:n,keychainError:r}=await t.clearToken(e.host);return r?{op:e,status:`failed`,detail:`keychain unreachable (${r}); remove manually: Keychain Access → service "open-knowledge"`}:{op:e,status:n.length>0?`removed`:`not-present`}}case`embeddings-key`:{let{touched:n}=await t.clearEmbeddingsKey();return{op:e,status:n.length>0?`removed`:`not-present`}}case`shell-block`:{let t=kr(e.rcFile);if(t.kind===`not-present`)return{op:e,status:`not-present`};if(t.kind===`declined`&&t.reason===`missing-symlink-target`)return{op:e,status:`skipped`,detail:`left the dangling shell symlink untouched; no target file contains a PATH block to remove: ${e.rcFile}`};if(t.kind===`declined`)return{op:e,status:`failed`,detail:`${Ss(t.reason)}: ${e.rcFile}`};let n;try{n=V(t.path,`utf-8`)}catch(t){return{op:e,status:`failed`,detail:`${Ss(vn(t))}: ${e.rcFile}`}}let{text:r,changed:i,emptyAfter:a}=cs(n);return i?a&&!t.symlink?($r(e.rcFile,{force:!0}),{op:e,status:`removed`,detail:`file removed (was OK-owned)`}):(on(t.path,r,{mode:yn(t.path)}),{op:e,status:`removed`}):{op:e,status:`not-present`}}case`extra-symlink`:return ls(e.path,e.target)?(U(e.path),{op:e,status:`removed`}):{op:e,status:`not-present`};case`mcp-entry`:{let n=Wn(Tn[e.editorId],e.cwd,e.home,e.configPath,t.env);switch(n.kind){case`removed`:return n.trustDetail?{op:e,status:`removed`,detail:n.trustDetail}:{op:e,status:`removed`};case`not-present`:return{op:e,status:`not-present`};case`left-foreign`:return{op:e,status:`skipped`,detail:`left a non-OK server in place`};case`declined`:if(n.reason===`missing-symlink-target`){let t=e.configPath;return e.editorId===`pi`?{op:e,status:`failed`,detail:`Pi bridge configuration left untouched (missing symlink target); Pi's separate folder trust grant has not been checked or removed. Restore the missing target of the OpenKnowledge bridge symlink at ${t}, or repoint that symlink to the intended bridge file, then retry cleanup`}:{op:e,status:`skipped`,detail:`left the dangling configuration symlink untouched; no target file contains an OpenKnowledge entry to remove: ${t}`}}return{op:e,status:`failed`,detail:Ss(n.reason)};default:throw Error(`unhandled mcp-remove outcome: ${n.kind}`)}}case`launch-entry`:{let t=Ar(e.projectRoot);switch(t.kind){case`removed`:return{op:e,status:`removed`};case`not-present`:return{op:e,status:`not-present`};case`declined`:return t.reason===`missing-symlink-target`?{op:e,status:`skipped`,detail:`left the dangling configuration symlink untouched; no target file contains an OpenKnowledge entry to remove: ${I(e.projectRoot,`.claude`,`launch.json`)}`}:{op:e,status:`failed`,detail:Ss(t.reason)};default:throw Error(`unhandled launch-remove outcome: ${t.kind}`)}}case`git-exclude`:{let t=_n(e.projectRoot,ws(e.projectRoot));if(t.kind===`no-exclude`)switch(t.reason){case`inaccessible`:return{op:e,status:`failed`,detail:`could not write .git/info/exclude (inaccessible)`};case`malformed-pointer`:return{op:e,status:`failed`,detail:`could not locate .git/info/exclude; repair the .git pointer at ${I(e.projectRoot,`.git`)} by restoring permissions or access to its repository, including any mounted volume. If its contents are malformed, restore a valid gitdir: <path> line pointing to the existing Git directory. For a linked worktree, run git worktree repair from the main repository with this worktree's path. If the repository is permanently gone, back up and remove only the stale .git pointer file, then retry cleanup`};case`no-git`:case`no-info-dir`:return{op:e,status:`not-present`}}return{op:e,status:t.removed.length>0?`removed`:`not-present`}}case`remove-path`:return Cs(e)}}function Ss(e){switch(e){case`permission-denied`:case`missing-symlink-target`:case`unresolved-symlink`:case`not-a-file`:case`unreadable`:case`disappeared`:return`configuration left untouched: ${jn(e)}`;case`oversize`:return`configuration left untouched (file is too large to edit safely); back up the file and reduce its size to 10 MiB or less while preserving needed settings, then retry cleanup`;case`duplicate-container`:return`configuration left untouched (duplicate server configuration blocks); combine the duplicate blocks while preserving their settings, then retry cleanup`;case`no-native-writer`:return`configuration left untouched (this install has no format-preserving TOML writer); remove the OpenKnowledge entry manually or reinstall OpenKnowledge, then retry cleanup`;case`unparseable`:return`configuration left untouched (unparseable); repair it and retry cleanup`;default:throw Error(`unhandled configuration decline reason: ${e}`)}}function Cs(e){if(e.requireOurState&&!Yn(e.path))return{op:e,status:`skipped`,detail:`not verified as OpenKnowledge — left untouched`};e.containWithin&&mn(e.path,e.containWithin);let t;try{t=qr(e.path)}catch(e){if(e.code!==`ENOENT`)throw e}if(!t)return{op:e,status:`not-present`};if(t.isSymbolicLink())return U(e.path),{op:e,status:`removed`};if(e.preserve&&e.preserve.length>0){let t=new Set(e.preserve),n=!1;for(let r of Yr(e.path))t.has(r)||($r(I(e.path,r),{recursive:!0,force:!0}),n=!0);return{op:e,status:n?`removed`:`not-present`}}return $r(e.path,{recursive:!0,force:!0}),{op:e,status:`removed`}}function ws(e){let t=new Set([I(e,`.claude`,`launch.json`)]);for(let n of Pn){let r=Tn[n].projectConfigPath?.(e);r&&t.add(r)}return xn(e).filter(n=>{let r=I(e,n);if(!t.has(r))return!0;try{return qr(r),!1}catch(e){if(e.code===`ENOENT`)return!0;throw e}})}function Ts(e){let t=new Map;for(let n of e){let e=t.get(n.group)??[];e.push(n),t.set(n.group,e)}return t}function Es(e){if(e.ops.length===0)return A(`Nothing to remove.`);let t=[];for(let[n,r]of Ts(e.ops)){t.length>0&&t.push(``),t.push(P(`${n}:`));for(let e of r)t.push(` ${N(`-`)} ${e.label}`)}return t.join(`
|
|
14
|
+
`)}function Mo(e){let t=qe(e.error instanceof Error?e.error.message:String(e.error));if(e.json){e.emit({type:`error`,message:t});return}let n=jo({error:e.error,url:e.url,branch:e.branch,principal:e.principal,resolvedLogin:e.resolvedLogin});e.printStderr(`${n??`✗ ${t}`}\n`)}async function No(e,t){let n=(await e.get(t))?.login;return n&&n!==`unknown`?n:null}async function Po(e){let t=x(e.error),n=e.auth?.tier===`A`?e.auth:void 0,r=null;if(!e.json&&t.kind===`auth`&&t.subclass===`403`){if(n)r=n.login??null;else if(e.auth?.tier!==`none`){let t=or(e.url);t&&(r=await(e.resolvePrincipal??(e=>No(Jn(),e)))(t.hostname))}}Mo({error:e.error,url:e.url,branch:e.branch,json:e.json,principal:r,resolvedLogin:n?.login??null,emit:e.emit,printStderr:e.printStderr})}function Fo(e){return new D(`clone`).description(`Clone a git repository and open it`).argument(`<url>`,`Repository URL or owner/repo shorthand`).argument(`[dir]`,`Target directory (default: ./<repo-name>)`).option(`--json`,`Output JSONL progress events`,!1).option(`-b, --branch <branch>`,`Branch to check out (falls back to default if missing)`).action(async(t,n,r)=>{let i=e(),a;try{let o=await To(t,{json:r.json,dir:n,branch:r.branch??null,onAuthResolved:e=>{a=e}},i);if(r.json)q(!0,{type:`complete`,dir:o});else{process.stderr.write(`✓ Cloned to ${o}\n`),process.chdir(o);let{startCommand:t}=await import(`./start-aC_vE1aA.mjs`);await t(e).parseAsync([],{from:`user`})}}catch(e){if(e instanceof Be||e instanceof He){r.json?q(!0,{type:`error`,message:e.message}):process.stderr.write(`${e.message}\n`),process.exitCode=78;return}await Po({error:e,url:t,branch:r.branch??null,json:r.json,auth:a,emit:e=>q(!0,e),printStderr:e=>process.stderr.write(e)}),process.exitCode=1}})}var Io=fe();const Lo=[[`sync`],[`persistence`,`debounceMs`],[`persistence`,`maxDebounceMs`],...S.map(e=>e.path)];function Ro(e){return Ie({absPath:rt(`project-local`,e),sideline:!1}).diagnostics}function zo(e={}){let t=e.log??(e=>console.error(e)),n=e.error??(e=>console.error(e)),r=e.loadConfigFn??Or;try{let{sources:n,diagnostics:i,sidelined:a}=r(e.cwd),o=(e.readProjectLocalFn??Ro)(e.cwd??process.cwd()),s=[...i,...o],c=n.length===0?`defaults only`:n.join(`, `),l=s.filter(e=>e.code!==`REMOVED_KEY`);l.length===0?t(`✓ Configuration valid (sources: ${c})`):t(`! Configuration loaded, but ${l.length} config layer(s) had issues (sources: ${c})`);for(let e of s)t(``),t(v(e));for(let{from:e,to:n}of a)t(``),t(`Moved ${e} aside to ${n} so defaults could be used. Restore it once fixed.`);return{ok:!0}}catch(e){return n(e instanceof Error?e.message:String(e)),{ok:!1}}}function Bo(e){let t=B(e,`utf-8`),n=(0,Io.parseDocument)(t);if(n.errors.length>0)throw Error(`Could not parse ${e}: ${n.errors.map(e=>e.message).join(`; `)}`);let r=[];for(let e of Lo)n.hasIn(e)&&r.push(e.join(`.`));return r}function Vo(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ho(e){let t={};for(let n of e){let e=t;for(let t=0;t<n.length-1;t++){let r=n[t],i=e[r],a=Vo(i)?i:{};e[r]=a,e=a}e[n[n.length-1]]=null}return t}function Uo(e){switch(e){case`project`:return[`project`];case`project-local`:return[`project-local`];case`user`:return[`user`];case`both`:return[`project`,`user`];case`all`:return[`project`,`project-local`,`user`]}}async function Wo(e={}){let t=e.log??(e=>console.log(e)),n=e.error??(e=>console.error(e)),r=e.scope??`all`,i=e.dryRun??!1,a=e.cwd??process.cwd(),o=e.writeConfigPatchFn??Je,s=Uo(r).map(t=>({scope:t,absPath:rt(t,a,e.homedirOverride)})),c=[],l=!0;for(let{scope:t,absPath:n}of s){if(!R(n)){c.push({path:n,scope:t,found:[],removed:[]});continue}let r;try{r=Bo(n)}catch(e){let r=e instanceof Error?e.message:String(e);c.push({path:n,scope:t,found:[],removed:[],error:r}),l=!1;continue}if(r.length===0||i){c.push({path:n,scope:t,found:r,removed:[]});continue}let s=await o({cwd:a,scope:t,patch:Ho(Lo.filter(e=>r.includes(e.join(`.`)))),homedirOverride:e.homedirOverride});if(!s.ok){c.push({path:n,scope:t,found:r,removed:[],error:v(s.error)}),l=!1;continue}c.push({path:n,scope:t,found:r,removed:r})}for(let e of c)e.error&&n(`✗ ${e.path}: ${e.error}`);let u=c.some(e=>e.error!==void 0),d=c.reduce((e,t)=>e+t.found.length,0);if(d===0&&!u)t(`No deprecated fields found.`);else if(d>0)for(let e of c)e.error||(e.found.length===0?t(` ${e.path}: no deprecated fields`):t(i?`[dry-run] ${e.path}: would remove ${e.found.length} field(s): ${e.found.join(`, `)}`:`✓ ${e.path}: removed ${e.removed.length} field(s): ${e.removed.join(`, `)}`));return{outcomes:c,ok:l}}const Go=`project | project-local | user | all`,Ko=new Set(Object.keys({project:!0,"project-local":!0,user:!0,both:!0,all:!0}));function qo(e){return e!==`config`}function Jo(){let e=new D(`config`).description(`Inspect and maintain OpenKnowledge configuration files`);return e.command(`validate`).description(`Validate the merged config (defaults → user → project)`).action(()=>{zo({}).ok||(process.exitCode=1)}),e.command(`migrate`).description(`Remove deprecated config fields from config.yml idempotently (every removed key in the registry — content.*, folders, appearance.editorModeDefault, server.host, etc. — plus the silently-dropped sync.*, persistence.*)`).option(`--scope <scope>`,`Which scope to migrate: ${Go}`,`all`).option(`--dry-run`,`Preview without writing`,!1).action(async e=>{let t=String(e.scope);if(!Ko.has(t)){console.error(`Invalid --scope: ${t}. Expected: ${Go}`),process.exitCode=2;return}(await Wo({scope:t,dryRun:e.dryRun})).ok||(process.exitCode=1)}),e}const Yo=[` 1. ${N(`Customize`)} (sidebar) → ${N(`Skills`)}`,` 2. Click the ${N(`+`)} button`,` 3. Click ${N(`Create skill`)}`,` 4. Click ${N(`Upload skill`)}`,` 5. Pick ${N(`openknowledge.skill`)} from Downloads`],Xo=O(` Open the Claude Desktop App, then: ${N(`Customize → Skills → + → Create skill → Upload skill`)} → pick the file.`);function Zo(e){let t=[A(`Built ${e.outputPath}`),k(` ${e.size} bytes • sha256 ${e.sha256?.slice(0,12)}…`)];return e.handoffError&&t.push(M(` Handoff failed: ${e.handoffError.message}`)),t.push(Xo),t.join(`
|
|
15
|
+
`)}function Qo(e){let t=e.skillVersion??`unknown`,n=e.recordedAt??`unknown`;return[O(`OpenKnowledge skill ${N(`v${t}`)} already delivered to Claude Desktop.`),k(` Recorded at ${n} in ~/.ok/skill-state.yml`),k(` Use ${N(`--force`)} to rebuild and re-open the install dialog.`)].join(`
|
|
16
|
+
`)}function $o(e){let t=e.skillVersion?` • Skill v${e.skillVersion}`:``;return[A(`Built ${e.outputPath}`),k(` ${e.size} bytes • sha256 ${e.sha256?.slice(0,12)}…${t}`),O(` Claude Desktop App opened. Now upload the file manually:`),...Yo,k(` If Claude Desktop didn't open, open it and start at step 1. The file is at ${e.outputPath}`)].join(`
|
|
17
|
+
`)}function es(e){return`${j(`Error:`)} ${e.buildError??`unknown build failure`}`}async function ts(e={}){let t=await fn(e);return t.status===`failed`?{...t,message:es(t),exitCode:1}:t.status===`skip-current`?{...t,message:Qo(t),exitCode:0}:t.status===`installed`?{...t,message:$o(t),exitCode:0}:{...t,message:Zo(t),exitCode:0}}function ns(){return new D(`cowork`).description("Build openknowledge.skill and open the Claude Desktop App so you can upload it for Claude Chat & Cowork. (Advanced/rarely needed — `ok init` already wires Claude.)").option(`--out <path>`,`Custom output path (default: ~/Downloads/openknowledge.skill)`).option(`--no-open`,`Build the file but skip the OS file-association handoff`).option(`--force`,`Bypass the install-state gate and rebuild unconditionally`).action(async e=>{let t=await ts({out:e.out,noOpen:!e.open,force:e.force??!1});process.stdout.write(`${t.message}\n`),t.exitCode!==0&&process.exit(t.exitCode)})}async function rs(e,t){let n=ci({input:t??process.stdin,output:process.stderr});try{let t=(await n.question(e)).trim().toLowerCase();return t===`y`||t===`yes`}finally{n.close()}}const is=/^# >>> open-knowledge cli >>>\n[\s\S]*?^# <<< open-knowledge cli <<<\n?/m;function as(e){return F(e,`Library`,`Application Support`,`OpenKnowledge`,`path-install.json`)}const os={existsSync:e=>R(e),readFileSync:(e,t)=>B(e,t),lstatSync:e=>Jr(e),readlinkSync:e=>Zr(e)};function ss(e,t=os){let n=as(e);if(!t.existsSync(n))return null;try{let e=JSON.parse(t.readFileSync(n,`utf8`));return e?.version===1?e:null}catch{return null}}function cs(e){let t=e.replace(is,``);return{text:t,changed:t!==e,emptyAfter:t.trim()===``}}function ls(e,t,n=os){try{return n.lstatSync(e).isSymbolicLink()?n.readlinkSync(e)===t:!1}catch{return!1}}function us(e,t={}){if(!Number.isSafeInteger(e)||e<=0)return null;let n=t.platform??process.platform,r=t.env??process.env,i=t.run??Nr;try{let t,a={encoding:`utf8`,stdio:[`ignore`,`pipe`,`pipe`],timeout:n===`win32`?15e3:5e3,windowsHide:!0,env:{...r,LC_ALL:`C`,TZ:`UTC0`}};if(n===`win32`){let n=Object.entries(r).find(([e])=>e.toLowerCase()===`systemroot`)?.[1]?.trim();t=i(Vr.join(n&&Vr.isAbsolute(n)?n:`C:\\Windows`,`System32`,`WindowsPowerShell`,`v1.0`,`powershell.exe`),[`-NoLogo`,`-NoProfile`,`-NonInteractive`,`-Command`,`$ErrorActionPreference = 'Stop'; (Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('O')`],a).trim()}else if(n===`darwin`||n===`linux`){let n=i(`/bin/ps`,[`-p`,String(e),`-o`,`lstart=`],a).trim();if(!/^\w{3}\s+\w{3}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}\s+\d{4}$/.test(n))return null;t=`${n} UTC`}else return null;let o=Date.parse(t);return Number.isFinite(o)?o:null}catch{return null}}async function ds(e,t={}){let n=t.isAlive??dn,r=mr(e,`server`,{isAlive:n}),i=`Quit OpenKnowledge and stop any OpenKnowledge server processes. Once you have confirmed they have exited, remove the stale lock file at ${r.lockPath} and retry cleanup.`,a=t=>(zn()?.warn({lockDir:e,lockPath:r.lockPath,status:r.status},t),Error(t));if(r.status===`corrupt`)throw a(`Cannot verify shutdown from the unreadable server lock at ${r.lockPath}. ${i}`);if(r.status===`foreign-host`)throw a(`Cannot verify shutdown: the server lock at ${r.lockPath} belongs to another machine. Stop OpenKnowledge on the owning machine. Confirm that no OpenKnowledge server is using this directory on the owning machine or any other machine sharing it. Only then remove the stale lock file at ${r.lockPath} and retry cleanup.`);if(r.status===`alive`){let e=typeof r.lock.startedAt==`string`?Date.parse(r.lock.startedAt):NaN;if(!Number.isFinite(e))throw a(`The server lock has no valid start time. ${i}`);let o=(t.readProcessStart??us)(r.lock.pid);if(o===null){if(!n(r.lock.pid))return{stopped:0,failed:[]};let e=process.platform===`linux`?`Linux requires ps supporting -p and -o lstart= (such as procps). Install a compatible ps and retry, or stop the server manually. `:`Stop the server manually. `;throw a(`Cannot verify the identity of process ${r.lock.pid}; the OS process-start query failed or is unavailable, so it was not signalled. `+e+`Confirm the OpenKnowledge server has exited before retrying cleanup after a manual stop.`)}if(o>e)throw a(`Process ${r.lock.pid} started after the server lock was acquired; it was not signalled. ${i}`)}let o=await cr({lockDir:e,inspect:()=>r,force:!0,log:()=>{},error:()=>{}}),s=o.failed.map(e=>({pid:e.target.pid,error:e.error})),c=new Set(o.stopped.map(e=>e.pid)),l=t.timeoutMs??1e4,u=performance.now()+l;for(;c.size>0;){for(let e of c)n(e)||c.delete(e);if(c.size===0)break;let e=u-performance.now();if(e<=0)break;await si(Math.min(t.pollIntervalMs??50,e))}for(let e of c)s.push({pid:e,error:`still running ${l}ms after SIGTERM`});return{stopped:o.stopped.length-c.size,failed:s}}function J(e,t){return e===t?`~`:e.startsWith(`${t}/`)?`~${e.slice(t.length)}`:e}function fs(e){return Br===`/`?e:e.split(Br).join(`/`)}function ps(e,t,n=`This project`){let r=[];r.push({kind:`stop-server`,group:n,label:`Stop the project server (if running)`,lockDir:E(e)});let i=new Set;for(let a of Fn){let o=En[a];if(!o.projectConfigPath)continue;let s=o.projectConfigPath(e);i.add(fs(I(e,s))),r.push({kind:`mcp-entry`,group:n,label:`Remove OK's MCP entry from ${o.label} (${fs(I(e,s))})`,editorId:a,scope:`project`,cwd:e,home:t,configPath:s})}r.push({kind:`launch-entry`,group:n,label:`Remove OK's entry from .claude/launch.json`,projectRoot:e}),r.push({kind:`git-exclude`,group:n,label:`Remove OK paths from .git/info/exclude`,projectRoot:e});let a=new Set([...Sn(e),..._n(e),...pe]);for(let t of a){let a=t.replace(/\/$/,``);i.has(a)||a!==`.claude/launch.json`&&r.push({kind:`remove-path`,group:n,label:`Remove ${t}`,path:F(e,a),containWithin:e})}try{r.push({kind:`remove-path`,group:n,label:`Remove the OK shadow repo (.git/ok/)`,path:Ge(e)})}catch{}let o=F(e,`.ok`);return r.sort((e,t)=>Number(e.kind===`remove-path`&&e.path===o)-Number(t.kind===`remove-path`&&t.path===o)),r.map(t=>t.kind===`stop-server`?t:{...t,requiresStoppedServers:[E(e)],...t.kind===`remove-path`?{requiresSuccessfulCleanup:!0}:{}})}function ms(e,t){return{scope:`deinit`,ops:ps(e,t)}}function hs(e){let{home:t,platform:n,host:r,lockDirs:i,marker:a,recentDeinitProjectRoots:o,purgeContent:s}=e,c=[];for(let e of i)c.push({kind:`stop-server`,group:`Running servers`,label:`Stop server at ${J(F(e,`..`,`..`),t)}`,lockDir:e});c.push({kind:`keychain-token`,group:`Credentials`,label:`Remove the GitHub credential (${r}) from the OS keychain + auth.yml`,host:r}),c.push({kind:`embeddings-key`,group:`Credentials`,label:`Remove all embeddings API keys (secrets.yml)`}),c.push(..._s(a,t));for(let e of Fn){let n=En[e],r;try{r=n.configPath(``,t)}catch{continue}c.push({kind:`mcp-entry`,group:`Editor MCP configs`,label:`Remove OK's MCP entry from ${n.label} (${J(r,t)})`,editorId:e,scope:`user`,cwd:t,home:t,configPath:r})}for(let e of tr(t))c.push({kind:`remove-path`,group:`Skill bundles`,label:`Remove ${J(e.path,t)}`,path:e.path});for(let e of o)c.push(...ps(e,t,`Project: ${Lr(e)}`));return c.push(...vs(t,n,e.env).map(e=>e.kind===`remove-path`?{...e,requiresSuccessfulCleanup:!0}:e)),c.push({kind:`remove-path`,group:`Global directory`,requiresSuccessfulCleanup:!0,label:s?`Remove ~/.ok (including user-authored skills)`:`Remove ~/.ok (keeping ~/.ok/skills)`,path:F(t,`.ok`),preserve:s?void 0:[`skills`]}),{scope:`uninstall`,ops:c}}function gs(e){return[F(e,`.zshrc`),F(e,`.bash_profile`),F(e,`.config`,`fish`,`conf.d`,`open-knowledge.fish`)]}function _s(e,t){let n=[],r=new Set([...gs(t),...e?.rcFiles??[]]);for(let e of r)Ar(e).kind!==`not-present`&&n.push({kind:`shell-block`,group:`Shell PATH`,label:`Strip the OK block from ${J(e,t)}`,rcFile:e});for(let r of e?.extraSymlinks??[])n.push({kind:`extra-symlink`,group:`Shell PATH`,label:`Remove the ok symlink at ${J(r.path,t)}`,path:r.path,target:r.target});return n}function vs(e,t,n){let r={home:e,platformName:t,env:n},i=er(r),a=vr(r),o=[{kind:`remove-path`,group:`Application data`,label:`Remove ${J(i,e)}`,path:i}];if(t===`darwin`){let t=er({...r,productName:hr});o.push({kind:`remove-path`,group:`Application data`,label:`Remove ${J(t,e)} (only if it is OpenKnowledge's)`,path:t,requireOurState:!0})}return o.push({kind:`remove-path`,group:`Application data`,label:`Remove ${J(a,e)}`,path:a}),o}async function ys(e,t={}){let n={clearToken:t.clearToken??Hn,clearEmbeddingsKey:t.clearEmbeddingsKey??Qe,stopServer:t.stopServer??ds,env:t.env??{}},r=async e=>{try{return await xs(e,n)}catch(t){return{op:e,status:`failed`,detail:t instanceof Error?t.message:String(t)}}},i=new Map;for(let t of e.ops){if(t.kind!==`stop-server`)continue;let e=L(t.lockDir);i.has(e)||i.set(e,await r(t))}let a=[];for(let t of e.ops){if(t.kind===`stop-server`){let e=i.get(L(t.lockDir));e&&a.push({...e,op:t});continue}let e=t.requiresStoppedServers??[...i.keys()],n=e.filter(e=>{let t=i.get(L(e));return!t||t.status===`failed`});if(n.length>0){a.push({op:t,status:`failed`,detail:`left untouched because server shutdown was not verified: ${n.join(`, `)}. Stop the server and retry cleanup.`});continue}if(t.kind===`remove-path`&&t.requiresSuccessfulCleanup&&a.some(n=>n.status===`failed`?!t.requiresStoppedServers||n.op.requiresStoppedServers?.some(t=>e.includes(t)):!1)){a.push({op:t,status:`failed`,detail:`left untouched so cleanup can be retried after the earlier failures are resolved`});continue}a.push(await r(t))}return{results:a,removed:a.filter(e=>e.status===`removed`),failed:a.filter(e=>e.status===`failed`)}}async function bs(e,t=pr){let n=[];for(let r of e.ops){if(r.kind!==`stop-server`)continue;let e=await t(r.lockDir);e!==null&&e!==0&&n.push(`${e} collaboration client${e===1?``:`s`} (editor window${e===1?``:`s`} or agents) ${e===1?`is`:`are`} connected to the server at ${r.lockDir}. Those windows will stop working, and restarting will NOT recover them — this removes the project state they depend on.`)}return n}async function xs(e,t){switch(e.kind){case`stop-server`:{let{stopped:n,failed:r}=await t.stopServer(e.lockDir);return r.length>0?{op:e,status:`failed`,detail:`could not stop the server (${r.map(e=>`pid ${e.pid}: ${e.error}`).join(`; `)}); dependent files were left untouched; stop the server and retry cleanup`}:{op:e,status:n>0?`removed`:`not-present`}}case`keychain-token`:{let{touched:n,keychainError:r}=await t.clearToken(e.host);return r?{op:e,status:`failed`,detail:`keychain unreachable (${r}); remove manually: Keychain Access → service "open-knowledge"`}:{op:e,status:n.length>0?`removed`:`not-present`}}case`embeddings-key`:{let{touched:n}=await t.clearEmbeddingsKey();return{op:e,status:n.length>0?`removed`:`not-present`}}case`shell-block`:{let t=Ar(e.rcFile);if(t.kind===`not-present`)return{op:e,status:`not-present`};if(t.kind===`declined`&&t.reason===`missing-symlink-target`)return{op:e,status:`skipped`,detail:`left the dangling shell symlink untouched; no target file contains a PATH block to remove: ${e.rcFile}`};if(t.kind===`declined`)return{op:e,status:`failed`,detail:`${Ss(t.reason)}: ${e.rcFile}`};let n;try{n=B(t.path,`utf-8`)}catch(t){return{op:e,status:`failed`,detail:`${Ss(yn(t))}: ${e.rcFile}`}}let{text:r,changed:i,emptyAfter:a}=cs(n);return i?a&&!t.symlink?(ei(e.rcFile,{force:!0}),{op:e,status:`removed`,detail:`file removed (was OK-owned)`}):(sn(t.path,r,{mode:bn(t.path)}),{op:e,status:`removed`}):{op:e,status:`not-present`}}case`extra-symlink`:return ls(e.path,e.target)?(H(e.path),{op:e,status:`removed`}):{op:e,status:`not-present`};case`mcp-entry`:{let n=Gn(En[e.editorId],e.cwd,e.home,e.configPath,t.env);switch(n.kind){case`removed`:return n.trustDetail?{op:e,status:`removed`,detail:n.trustDetail}:{op:e,status:`removed`};case`not-present`:return{op:e,status:`not-present`};case`left-foreign`:return{op:e,status:`skipped`,detail:`left a non-OK server in place`};case`declined`:if(n.reason===`missing-symlink-target`){let t=e.configPath;return e.editorId===`pi`?{op:e,status:`failed`,detail:`Pi bridge configuration left untouched (missing symlink target); Pi's separate folder trust grant has not been checked or removed. Restore the missing target of the OpenKnowledge bridge symlink at ${t}, or repoint that symlink to the intended bridge file, then retry cleanup`}:{op:e,status:`skipped`,detail:`left the dangling configuration symlink untouched; no target file contains an OpenKnowledge entry to remove: ${t}`}}return{op:e,status:`failed`,detail:Ss(n.reason)};default:throw Error(`unhandled mcp-remove outcome: ${n.kind}`)}}case`launch-entry`:{let t=jr(e.projectRoot);switch(t.kind){case`removed`:return{op:e,status:`removed`};case`not-present`:return{op:e,status:`not-present`};case`declined`:return t.reason===`missing-symlink-target`?{op:e,status:`skipped`,detail:`left the dangling configuration symlink untouched; no target file contains an OpenKnowledge entry to remove: ${F(e.projectRoot,`.claude`,`launch.json`)}`}:{op:e,status:`failed`,detail:Ss(t.reason)};default:throw Error(`unhandled launch-remove outcome: ${t.kind}`)}}case`git-exclude`:{let t=vn(e.projectRoot,ws(e.projectRoot));if(t.kind===`no-exclude`)switch(t.reason){case`inaccessible`:return{op:e,status:`failed`,detail:`could not write .git/info/exclude (inaccessible)`};case`malformed-pointer`:return{op:e,status:`failed`,detail:`could not locate .git/info/exclude; repair the .git pointer at ${F(e.projectRoot,`.git`)} by restoring permissions or access to its repository, including any mounted volume. If its contents are malformed, restore a valid gitdir: <path> line pointing to the existing Git directory. For a linked worktree, run git worktree repair from the main repository with this worktree's path. If the repository is permanently gone, back up and remove only the stale .git pointer file, then retry cleanup`};case`no-git`:case`no-info-dir`:return{op:e,status:`not-present`}}return{op:e,status:t.removed.length>0?`removed`:`not-present`}}case`remove-path`:return Cs(e)}}function Ss(e){switch(e){case`permission-denied`:case`missing-symlink-target`:case`unresolved-symlink`:case`not-a-file`:case`unreadable`:case`disappeared`:return`configuration left untouched: ${Mn(e)}`;case`oversize`:return`configuration left untouched (file is too large to edit safely); back up the file and reduce its size to 10 MiB or less while preserving needed settings, then retry cleanup`;case`duplicate-container`:return`configuration left untouched (duplicate server configuration blocks); combine the duplicate blocks while preserving their settings, then retry cleanup`;case`no-native-writer`:return`configuration left untouched (this install has no format-preserving TOML writer); remove the OpenKnowledge entry manually or reinstall OpenKnowledge, then retry cleanup`;case`unparseable`:return`configuration left untouched (unparseable); repair it and retry cleanup`;default:throw Error(`unhandled configuration decline reason: ${e}`)}}function Cs(e){if(e.requireOurState&&!Xn(e.path))return{op:e,status:`skipped`,detail:`not verified as OpenKnowledge — left untouched`};e.containWithin&&hn(e.path,e.containWithin);let t;try{t=Jr(e.path)}catch(e){if(e.code!==`ENOENT`)throw e}if(!t)return{op:e,status:`not-present`};if(t.isSymbolicLink())return H(e.path),{op:e,status:`removed`};if(e.preserve&&e.preserve.length>0){let t=new Set(e.preserve),n=!1;for(let r of Xr(e.path))t.has(r)||(ei(F(e.path,r),{recursive:!0,force:!0}),n=!0);return{op:e,status:n?`removed`:`not-present`}}return ei(e.path,{recursive:!0,force:!0}),{op:e,status:`removed`}}function ws(e){let t=new Set([F(e,`.claude`,`launch.json`)]);for(let n of Fn){let r=En[n].projectConfigPath?.(e);r&&t.add(r)}return Sn(e).filter(n=>{let r=F(e,n);if(!t.has(r))return!0;try{return Jr(r),!1}catch(e){if(e.code===`ENOENT`)return!0;throw e}})}function Ts(e){let t=new Map;for(let n of e){let e=t.get(n.group)??[];e.push(n),t.set(n.group,e)}return t}function Es(e){if(e.ops.length===0)return k(`Nothing to remove.`);let t=[];for(let[n,r]of Ts(e.ops)){t.length>0&&t.push(``),t.push(N(`${n}:`));for(let e of r)t.push(` ${M(`-`)} ${e.label}`)}return t.join(`
|
|
18
18
|
`)}function Ds(e){return e.replaceAll(`
|
|
19
19
|
`,`
|
|
20
|
-
`)}function Os(e){let t=e.removed.length,n=e.failed.length,r=e.results.filter(e=>e.status===`not-present`).length,i=e.results.filter(e=>e.status===`skipped`),a=[];a.push(n>0?
|
|
21
|
-
`)}function ks(e,t=[]){return{scope:e.scope,mode:`dry-run`,planned:e.ops.map(e=>({kind:e.kind,label:e.label})),attachedClients:t}}function As(e,t,n=[]){return{scope:e,mode:`applied`,removed:t.removed.map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail})),skipped:t.results.filter(e=>e.status===`skipped`).map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail})),failed:t.failed.map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail})),attachedClients:n}}async function js(e={}){let t=
|
|
22
|
-
`)}`:``;if(e.dryRun)return{status:`dry-run`,message:e.json?JSON.stringify(ks(r,i),null,2):`${
|
|
23
|
-
`).filter(Boolean).slice(0,25);for(let e of r){let t=(await n.raw(`log`,`-1`,`--format=%cI%x00%B`,e)).trim(),r=t.indexOf(`\0`);if(r<0)continue;let i=t.slice(0,r),a=t.slice(r+1);if(
|
|
24
|
-
`))n.push(` ${Y.default.dim(t)}`);return n}function $s(e){let t=e.filter(e=>e.status===`fail`).length,n=e.filter(e=>e.status===`warn`).length;if(t===0&&n===0)return`All checks passed`;let r=[];return t>0&&r.push(`${t} error${t===1?``:`s`}`),n>0&&r.push(`${n} warning${n===1?``:`s`}`),r.join(`, `)}async function ec(e,t={}){let n=t.checks??Xs(),r=t.stdout??(e=>console.log(e)),i=t.stderr??(e=>console.error(e)),a=e.quiet??!1,o=e.json??!1,s=e.verbose??!1,c;if(e.check!==void 0){if(!Hs(e.check))return i(Y.default.red(`unknown check '${e.check}'. Valid: ${Vs.join(`, `)}`)),2;let t=e.check,r=n.find(e=>e.name===t);if(!r)return i(Y.default.red(`internal error: check '${e.check}' not registered`)),2;c=[r]}else c=[...n];let l={cwd:e.cwd},u=await Ws(c,l,t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs});if(!a){if(o)for(let e of u)r(JSON.stringify(e));else{for(let e of u)for(let t of Qs(e,s))r(t);r(``),r($s(u))}}return+!!u.some(e=>e.status===`fail`)}function tc(){return new
|
|
25
|
-
`)){let e=n.match(/127\.0\.0\.1:(\d+)\s*\(LISTEN\)/);if(e){let n=Number.parseInt(e[1]??``,10);Number.isNaN(n)||t.push(n)}}return t}function ac(e){let t=
|
|
20
|
+
`)}function Os(e){let t=e.removed.length,n=e.failed.length,r=e.results.filter(e=>e.status===`not-present`).length,i=e.results.filter(e=>e.status===`skipped`),a=[];a.push(n>0?M(`Removed ${t} item${t===1?``:`s`}, ${n} could not be removed.`):A(`✓ Removed ${t} item${t===1?``:`s`}.`)),r>0&&a.push(k(` ${r} already absent.`));for(let t of e.removed)t.detail!==void 0&&a.push(` ${M(`·`)} ${t.op.label} — ${k(Ds(t.detail))}`);for(let e of i)a.push(` ${M(`·`)} Left in place: ${e.op.label}${e.detail?` — ${k(Ds(e.detail))}`:``}`);if(n>0){a.push(``),a.push(j(`Could not remove:`));for(let t of e.failed)a.push(` ${j(`✗`)} ${t.op.label}${t.detail?` — ${Ds(t.detail)}`:``}`)}return a.join(`
|
|
21
|
+
`)}function ks(e,t=[]){return{scope:e.scope,mode:`dry-run`,planned:e.ops.map(e=>({kind:e.kind,label:e.label})),attachedClients:t}}function As(e,t,n=[]){return{scope:e,mode:`applied`,removed:t.removed.map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail})),skipped:t.results.filter(e=>e.status===`skipped`).map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail})),failed:t.failed.map(e=>({kind:e.op.kind,label:e.op.label,detail:e.detail})),attachedClients:n}}async function js(e={}){let t=L(e.cwd??process.cwd()),n=e.home??U();if(Rt(t,n))return{status:`failed`,message:`${j(`Refusing to deinit your home directory.`)}\n ${t}/.ok is OpenKnowledge's user-global directory (global.yml, skills/,\n auth.yml), not a project. Removing it would delete your global settings and skills.\n To remove OpenKnowledge everywhere, use 'ok uninstall'.`,exitCode:64};if(!R(F(t,`.ok`)))return{status:`no-op`,message:k(`No OpenKnowledge project found at ${t}. Nothing to remove.`),exitCode:0};let r=ms(t,n),i=await bs(r,e.probeClients),a=i.length>0?`\n\n${i.map(e=>M(e)).join(`
|
|
22
|
+
`)}`:``;if(e.dryRun)return{status:`dry-run`,message:e.json?JSON.stringify(ks(r,i),null,2):`${N(`Would remove (dry-run — no changes made):`)}\n\n${Es(r)}${a}`,exitCode:0};if(e.json&&!e.yes)return{status:`failed`,message:`${j(`Error:`)} --json requires --yes (or --dry-run) so there is no interactive prompt.`,exitCode:1};if(!e.yes&&(process.stderr.write(`${N(`Remove OpenKnowledge from ${t}:`)}\n\n${Es(r)}${a}\n\n`),!await rs(`${N(`Remove these?`)} ${k(`[y/N] `)}`,e.confirmStream)))return{status:`cancelled`,message:k(`Cancelled.`),exitCode:0};let o=await ys(r,{env:e.env??(e.home===void 0?process.env:{}),...e.runRemovalDeps});return{status:o.failed.length>0?`failed`:`done`,message:e.json?JSON.stringify(As(`deinit`,o,i),null,2):Os(o),exitCode:+(o.failed.length>0)}}function Ms(){return new D(`deinit`).description("Remove OpenKnowledge from this project (its .ok/, editor MCP entries, git-exclude lines, shadow repo) while leaving your markdown content untouched. Re-run `ok start` to re-scaffold.").argument(`[path]`,`Project directory (defaults to the current project)`).option(`-y, --yes`,`Skip the confirmation prompt`).option(`--dry-run`,`Print the removal plan and exit without changing anything`).option(`--json`,`Emit a machine-readable plan/outcome (requires --yes or --dry-run)`).action(async(e,t)=>{let n=await js({cwd:e??process.cwd(),yes:t.yes,dryRun:t.dryRun,json:t.json});process.stdout.write(`${n.message}\n`),n.exitCode!==0&&(process.exitCode=n.exitCode)})}var Y=e(yr(),1);function Ns(){let e=Ir(`bun`,[`--version`],T({encoding:`utf-8`,timeout:5e3,env:{...process.env,LANG:`C`,LC_ALL:`C`}}));return e.error?{ok:!1,error:e.error.message}:e.signal===`SIGTERM`?{ok:!1,error:`probe timed out`}:e.status===0?{ok:!0,version:e.stdout.trim()}:{ok:!1,error:e.stderr?.trim()||`exit code ${e.status}`}}function Ps(e={}){let t=e.probe??Ns;return{name:`bun`,run:async()=>{let e=t();return e.ok?{name:`bun`,status:`pass`,summary:`bun ${e.version}`}:{name:`bun`,status:`fail`,summary:`bun not found on PATH`,remediation:`Install Bun: https://bun.sh/docs/installation`,detail:e.error}}}}function Fs(e={}){let t=e.loader??Or;return{name:`config-yaml`,run:async e=>{let n=L(e.cwd,`.ok`,Dr);if(!R(n))return{name:`config-yaml`,status:`warn`,summary:`.ok/${Dr} not found (project not initialized)`,remediation:"Run `ok init` to scaffold the project."};try{let{config:n,sources:r}=t(e.cwd);return{name:`config-yaml`,status:`pass`,summary:`parses; content.dir = ${n.content.dir}`,detail:`sources: ${r.join(`, `)}`}}catch(e){let t=e instanceof Error?e.message:String(e);return{name:`config-yaml`,status:`fail`,summary:`.ok/${Dr} failed to parse`,detail:t}}}}}function Is(e){try{return Wr(e,qr.W_OK),{writable:!0}}catch(e){return{writable:!1,reason:e instanceof Error?e.message:String(e)}}}function Ls(e={}){let t=e.loader??Or,n=e.probeWritable??Is;return{name:`content-dir`,run:async e=>{let r=L(e.cwd,`.ok`,Dr);if(!R(r))return{name:`content-dir`,status:`warn`,summary:`project not initialized`,remediation:"Run `ok init` to scaffold the project."};let i;try{let{config:n}=t(e.cwd);i=L(e.cwd,n.content.dir)}catch(e){return{name:`content-dir`,status:`fail`,summary:`content.dir unresolved (config invalid)`,detail:e instanceof Error?e.message:String(e)}}if(!R(i))return{name:`content-dir`,status:`fail`,summary:`content.dir does not exist: ${i}`,remediation:`Create the directory or fix \`content.dir\` in .ok/${Dr}.`};if(!V(i).isDirectory())return{name:`content-dir`,status:`fail`,summary:`content.dir is not a directory: ${i}`};let a=n(i);return a.writable?{name:`content-dir`,status:`pass`,summary:`${i} (writable)`}:{name:`content-dir`,status:`fail`,summary:`content.dir is not writable: ${i}`,detail:a.reason}}}}function Rs(e={}){let t=e.assert??Ke;return{name:`git`,run:async()=>{try{let e=t();return{name:`git`,status:`pass`,summary:`git ${e.version} (${e.source} — ${e.resolvedPath})`}}catch(e){if(e instanceof Be)return{name:`git`,status:`fail`,summary:`git not found`,remediation:e.guidance.options.map(e=>`${e.label}: ${e.command}`).join(` / `),detail:e.message};if(e instanceof He)return{name:`git`,status:`fail`,summary:`git ${e.detected} is older than required ${e.required}`,remediation:e.guidance.options.map(e=>`${e.label}: ${e.command}`).join(` / `),detail:e.message};throw e}}}}function zs(e){let t=Ir(`codesign`,[`--verify`,`--deep`,`--strict`,e],{encoding:`utf-8`,timeout:5e3,env:{...process.env,LANG:`C`,LC_ALL:`C`}});return t.error?{ok:!1,stderr:t.error.message}:t.signal===`SIGTERM`?{ok:!1,stderr:`codesign probe timed out`}:{ok:t.status===0,stderr:(t.stderr??``).trim()}}function Bs(e={}){let t=e.platform??process.platform,n=e.execPath??process.execPath,r=e.codesignVerify??zs;return{name:`macos-codesig`,run:async()=>{if(t!==`darwin`)return{name:`macos-codesig`,status:`pass`,summary:`skipped on ${t} (macOS-only check)`};let e=n.indexOf(`/Contents/MacOS/`);if(e===-1)return{name:`macos-codesig`,status:`pass`,summary:`dev mode (no app bundle)`};let i=n.slice(0,e);if(i.startsWith(`/private/var/folders/`))return{name:`macos-codesig`,status:`fail`,summary:`app is running translocated (quarantine sandbox)`,remediation:`Drag OpenKnowledge.app to /Applications/ and re-launch.`,detail:`bundlePath: ${i}`};let a=r(i);return a.ok?{name:`macos-codesig`,status:`pass`,summary:`signed bundle at ${i}`}:{name:`macos-codesig`,status:`fail`,summary:`codesign --verify failed`,remediation:`Re-download OpenKnowledge from the official releases page.`,detail:`bundlePath: ${i}\n${a.stderr}`}}}}const Vs=[`git`,`bun`,`config-yaml`,`content-dir`,`server-lock`,`shadow-repo`,`shadow-health`,`macos-codesig`];function Hs(e){return Vs.includes(e)}async function Us(e,t,n={}){let r=n.timeoutMs??5e3,i,a=Math.round(r/1e3);try{let n=new Promise(t=>{i=setTimeout(()=>{t({name:e.name,status:`fail`,summary:`check timed out after ${a}s`})},r)}),o=e.run(t),s=await Promise.race([o,n]);return o.catch(()=>{}),s}catch(t){let n=t instanceof Error?t.message:String(t);return{name:e.name,status:`fail`,summary:`check crashed: ${n}`}}finally{i!==void 0&&clearTimeout(i)}}async function Ws(e,t,n={}){let r=[];for(let i of e)r.push(await Us(i,t,n));return r}function Gs(e={}){let t=e.inspect??(e=>mr(e,`server`));return{name:`server-lock`,run:async e=>{let n=E(e.cwd);if(!R(n))return{name:`server-lock`,status:`pass`,summary:"no server lock (no `.ok/local/` yet)"};let r=t(n);switch(r.status){case`missing`:return{name:`server-lock`,status:`pass`,summary:`no server holding the lock`};case`alive`:return{name:`server-lock`,status:`fail`,summary:`server lock held by pid ${r.lock.pid} on this host`,remediation:"Stop the other OpenKnowledge process or run `ok stop`.",detail:`lockPath: ${r.lockPath}; port: ${r.lock.port}; started: ${r.lock.startedAt}`};case`foreign-host`:return{name:`server-lock`,status:`warn`,summary:`lock claimed by ${r.lock.hostname} (foreign host)`,remediation:`Run \`ok clean\` to prune the stale lock at ${L(n,`server.lock`)}.`,detail:`lockPath: ${r.lockPath}; pid: ${r.lock.pid}`};case`dead-pid`:return{name:`server-lock`,status:`warn`,summary:`stale lock for non-existent pid ${r.lock.pid}`,remediation:"Run `ok clean` to prune.",detail:`lockPath: ${r.lockPath}`};case`corrupt`:return{name:`server-lock`,status:`warn`,summary:`server.lock is corrupt (unparseable or invalid pid)`,remediation:`Delete ${r.lockPath} and rerun.`};default:return r}}}}async function Ks(e,t){let n={gitDir:e,workTree:t},r=await Qt(n),i=await Dt(n),a=await Ct(n,Date.now()-18e5),o=Pt(n),s=null;for(let t of[`objects/info/commit-graph`,`objects/info/commit-graphs`]){let n=L(e,t);if(R(n))try{s=Math.max(s??0,V(n).mtimeMs)}catch{}}let c=null;try{let n=yt({baseDir:t,timeout:{block:4e3}}).env({GIT_DIR:e}),r=(await n.raw(`for-each-ref`,`--sort=-creatordate`,`--format=%(objectname)`,`refs/checkpoints/`)).trim().split(`
|
|
23
|
+
`).filter(Boolean).slice(0,25);for(let e of r){let t=(await n.raw(`log`,`-1`,`--format=%cI%x00%B`,e)).trim(),r=t.indexOf(`\0`);if(r<0)continue;let i=t.slice(0,r),a=t.slice(r+1);if(be(a)?.kind===`auto-consolidation`){let e=Date.parse(i);Number.isFinite(e)&&(c=e);break}}}catch{}return{looseObjects:r.looseObjects,packfiles:r.packfiles,wipWidth:i,deadChains:a,gcLogLatch:o,lastPackedAtMs:s,lastConsolidationAtMs:c}}function qs(e){if(e===null)return`never`;let t=Date.now()-e,n=t/864e5;if(n>=1)return`${Math.round(n)}d ago`;let r=t/36e5;return r>=1?`${Math.round(r)}h ago`:`${Math.max(0,Math.round(t/6e4))}m ago`}function Js(e={}){let t=e.resolveDir??Ge,n=e.readFacts??Ks;return{name:`shadow-health`,run:async e=>{let r=L(e.cwd,`.git`);if(!R(r))return{name:`shadow-health`,status:`warn`,summary:`no .git/ at project root (shadow repo not initialized)`,remediation:"Run `ok start` once to initialize the shadow repo."};let i;try{i=t(e.cwd)}catch(e){return{name:`shadow-health`,status:`warn`,summary:`cannot resolve shadow gitdir: ${e instanceof Error?e.message:String(e)}`}}if(!R(i))return{name:`shadow-health`,status:`warn`,summary:`shadow repo not yet initialized`,remediation:"Run `ok start` once to initialize the shadow repo."};let a=await n(i,e.cwd),o=[];a.gcLogLatch&&o.push(`gc.log latch present (auto-packing disabled until it self-expires)`),a.looseObjects>2e3?o.push(`${a.looseObjects} loose objects (unpacked)`):a.packfiles===0&&a.looseObjects>512&&o.push(`${a.looseObjects} loose objects, never packed`),a.deadChains>5&&o.push(`${a.deadChains} dead chains unfolded (auto-consolidation not keeping up)`),a.wipWidth>20&&o.push(`${a.wipWidth} WIP refs (version-journal width high)`);let s=[`loose objects: ${a.looseObjects}`,`packfiles: ${a.packfiles}`,`WIP refs: ${a.wipWidth}`,`dead chains: ${a.deadChains}`,`gc.log latch: ${a.gcLogLatch?`present`:`none`}`,`last packed: ${qs(a.lastPackedAtMs)}`,`last fold: ${qs(a.lastConsolidationAtMs)}`].join(`, `);return o.length>0?{name:`shadow-health`,status:`warn`,summary:`history may be slow: ${o.join(`; `)}`,remediation:`Packing and journal cleanup run automatically on the next server start and during use. If this persists, check the server logs.`,detail:s}:{name:`shadow-health`,status:`pass`,summary:`${a.looseObjects} loose, ${a.packfiles} packs, ${a.wipWidth} WIP refs`,detail:s}}}}function Ys(e={}){let t=e.resolve??Ge;return{name:`shadow-repo`,run:async e=>{let n=L(e.cwd,`.git`);if(!R(n))return{name:`shadow-repo`,status:`warn`,summary:`no .git/ at project root (shadow repo not initialized)`,remediation:"Run `ok start` once to initialize the shadow repo."};let r;try{r=t(e.cwd)}catch(e){if(e instanceof ke||e instanceof Lt)return{name:`shadow-repo`,status:`fail`,summary:`cannot resolve shadow gitdir: ${e.message}`};throw e}if(!R(r))return{name:`shadow-repo`,status:`warn`,summary:`shadow repo at ${r} not yet initialized`,remediation:"Run `ok start` once to initialize the shadow repo."};let i=L(r,`HEAD`);if(!R(i))return{name:`shadow-repo`,status:`fail`,summary:`shadow repo at ${r} is missing HEAD`};let a;try{a=B(i,`utf-8`).trim()}catch(e){return{name:`shadow-repo`,status:`fail`,summary:`cannot read shadow HEAD: ${e instanceof Error?e.message:String(e)}`}}return{name:`shadow-repo`,status:`pass`,summary:`${r} (HEAD: ${a})`}}}}function Xs(){return[Rs(),Ps(),Fs(),Ls(),Gs(),Ys(),Js(),Bs()]}function Zs(e){switch(e){case`pass`:return Y.default.green(`✓`);case`warn`:return Y.default.yellow(`!`);case`fail`:return Y.default.red(`✗`)}}function Qs(e,t){let n=[`[${Zs(e.status)}] ${e.name}: ${e.summary}`];if(e.remediation!==void 0&&e.status!==`pass`&&n.push(` → ${e.remediation}`),t&&e.detail!==void 0)for(let t of e.detail.split(`
|
|
24
|
+
`))n.push(` ${Y.default.dim(t)}`);return n}function $s(e){let t=e.filter(e=>e.status===`fail`).length,n=e.filter(e=>e.status===`warn`).length;if(t===0&&n===0)return`All checks passed`;let r=[];return t>0&&r.push(`${t} error${t===1?``:`s`}`),n>0&&r.push(`${n} warning${n===1?``:`s`}`),r.join(`, `)}async function ec(e,t={}){let n=t.checks??Xs(),r=t.stdout??(e=>console.log(e)),i=t.stderr??(e=>console.error(e)),a=e.quiet??!1,o=e.json??!1,s=e.verbose??!1,c;if(e.check!==void 0){if(!Hs(e.check))return i(Y.default.red(`unknown check '${e.check}'. Valid: ${Vs.join(`, `)}`)),2;let t=e.check,r=n.find(e=>e.name===t);if(!r)return i(Y.default.red(`internal error: check '${e.check}' not registered`)),2;c=[r]}else c=[...n];let l={cwd:e.cwd},u=await Ws(c,l,t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs});if(!a){if(o)for(let e of u)r(JSON.stringify(e));else{for(let e of u)for(let t of Qs(e,s))r(t);r(``),r($s(u))}}return+!!u.some(e=>e.status===`fail`)}function tc(){return new D(`health`).description(`Run environment health checks (${Vs.join(`, `)})`).option(`--json`,`Emit NDJSON (one CheckResult per line)`).option(`--verbose`,`Include detail field + probe context in human-readable output`).option(`--check <name>`,`Run only the named check. One of: ${Vs.join(`, `)}`).option(`--quiet`,`Suppress output; exit code only`).action(async e=>{let t=await ec({cwd:process.cwd(),json:e.json,verbose:e.verbose,check:e.check,quiet:e.quiet});process.exit(t)})}function nc(e){let t=Ir(`ps`,[`-p`,String(e),`-o`,`%cpu=,%mem=,rss=,vsz=`],T({encoding:`utf-8`,timeout:2e3}));if(t.error||!t.stdout?.trim())return null;let[n,r,i,a]=t.stdout.trim().split(/\s+/),o=Number.parseFloat(n??``),s=Number.parseFloat(r??``),c=Number.parseInt(i??``,10),l=Number.parseInt(a??``,10);return Number.isNaN(o)||Number.isNaN(s)||Number.isNaN(c)||Number.isNaN(l)?null:{ts:new Date().toISOString(),pid:e,cpuPercent:o,memPercent:s,rssKb:c,vszKb:l}}function rc(e){let t=Ir(`lsof`,[`-p`,String(e)],T({encoding:`utf-8`,timeout:5e3}));return t.error||!t.stdout?null:t.stdout}function ic(e){let t=[];for(let n of e.split(`
|
|
25
|
+
`)){let e=n.match(/127\.0\.0\.1:(\d+)\s*\(LISTEN\)/);if(e){let n=Number.parseInt(e[1]??``,10);Number.isNaN(n)||t.push(n)}}return t}function ac(e){let t=Ir(`curl`,[`-s`,`--max-time`,`2`,`http://127.0.0.1:${e}/json/list`],T({encoding:`utf-8`,timeout:3e3}));if(t.error||!t.stdout?.trim())return null;try{let e=JSON.parse(t.stdout);return Array.isArray(e)?e:null}catch{return null}}function oc(e,t,n){let r=Yr(F(ri(),`ok-cdp-`)),i=F(r,`profiler.mjs`);return ti(i,`import { writeFileSync } from 'node:fs';
|
|
26
26
|
const ws = new WebSocket(${JSON.stringify(e)});
|
|
27
27
|
let id = 0;
|
|
28
28
|
const send = (m) => ws.send(JSON.stringify({ id: ++id, method: m }));
|
|
@@ -41,19 +41,19 @@ ws.addEventListener('message', ({ data }) => {
|
|
|
41
41
|
ws.addEventListener('close', () => process.exit(0));
|
|
42
42
|
ws.addEventListener('error', () => process.exit(1));
|
|
43
43
|
setTimeout(() => process.exit(2), ${t+1e4});
|
|
44
|
-
`),i}async function sc(e,t,n,r,i){let a=oc(e,t,
|
|
45
|
-
`)}async function lc(e,t={}){let{pid:n,cpuProfileSecs:r=15,noInspector:i=!1}=e,a=t.log??(e=>console.log(e)),o=t.discover??Ve,s=t.inspect??(e=>
|
|
46
|
-
`)}\n`);try{S(`stacks.txt`,cc(
|
|
47
|
-
`),process.exitCode=1;return}let n=
|
|
44
|
+
`),i}async function sc(e,t,n,r,i){let a=oc(e,t,F(r,`cpu.cpuprofile`)),o=!1,s=Fr(process.execPath,[a],T({stdio:`ignore`})),c=setInterval(()=>{let e=nc(n);e&&i(e)},1e3);await new Promise(e=>{s.once(`close`,t=>{o=t===0,e()}),setTimeout(()=>{s.kill(),e()},t+12e3)}),clearInterval(c);try{ei(F(a,`..`),{recursive:!0,force:!0})}catch{}return o}function cc(e){let t;try{t=JSON.parse(e)}catch{return`(could not parse profile)`}let n=new Map(t.nodes.map(e=>[e.id,e])),r=new Map;for(let e of t.nodes)for(let t of e.children??[])r.set(t,e.id);let i=new Map;for(let e of t.samples??[])i.set(e,(i.get(e)??0)+1);let a=t.samples?.length??0,o=t.endTime!=null&&t.startTime!=null?((t.endTime-t.startTime)/1e3).toFixed(2):`?`,s=[...i.entries()].sort((e,t)=>t[1]-e[1]).slice(0,10),c=[`samples ${a} duration_ms ${o}`,``,`Top leaf nodes`];for(let[e,t]of s){let r=n.get(e);if(!r)continue;let i=a>0?(t/a*100).toFixed(1):`0.0`,{functionName:o,url:s,lineNumber:l,columnNumber:u}=r.callFrame;c.push(` ${t} ${i}% id=${e} ${o||`(anonymous)`} ${s}:${l}:${u} hit=${r.hitCount??0}`)}c.push(``,`Top stacks`);let l=e=>{let t=[],i=e;for(;i!=null;){let e=n.get(i);if(!e)break;let{functionName:a,url:o,lineNumber:s,columnNumber:c}=e.callFrame;t.unshift(` ${a||`(anonymous)`} ${o} ${s} ${c}`),i=r.get(i)}return t};for(let[e,t]of s.slice(0,5)){let n=a>0?(t/a*100).toFixed(1):`0.0`;c.push(``,`--- ${t} ${n}%`,...l(e))}return c.join(`
|
|
45
|
+
`)}async function lc(e,t={}){let{pid:n,cpuProfileSecs:r=15,noInspector:i=!1}=e,a=t.log??(e=>console.log(e)),o=t.discover??Ve,s=t.inspect??(e=>mr(e,`server`)),c=t.resolveCommand??Nt,l=t.resolveUsage??At,u=t.collectLsofFn??rc,d=t.getEndpoints??ac,f=t.profiler??sc,p=t.isAlive??(e=>{try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}),m=t.sendSignal??((e,t)=>{process.kill(e,t)}),h=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),g=r*1e3;if(!p(n)){a(Y.default.red(`No process with pid ${n} found.`));return}let _=await o(),v=null,y=null;for(let e of _){let t=s(e);if(t.status!==`missing`&&t.status!==`corrupt`&&t.lock.pid===n){v=t.lock.worktreeRoot,y={lockDir:e,state:t.status,lockPath:t.lockPath,lock:t.lock};break}}let b=new Date().toISOString().replace(/[:.]/g,`-`),x=e.output?e.output:v?F(v,`.ok`,`local`,`diagnostics`,`process-${n}-${b}`):F(process.cwd(),`ok-diagnose-${n}-${b}`);try{z(x,{recursive:!0})}catch(e){a(Y.default.red(`Cannot create output directory ${x}: ${e.message}`));return}a(Y.default.bold(`Diagnosing pid ${n}`)),a(`Output: ${x}`),a(``);let S=(e,t)=>{ti(F(x,e),t),a(` wrote ${e}`)},ee=c(n),C=l(n);S(`metadata.json`,JSON.stringify({capturedAt:new Date().toISOString(),pid:n,command:ee,usage:C,lockInfo:y},null,2)),a(` sampling lsof`);let te=u(n);if(te&&S(`lsof.txt`,te),!i){let e=te?ic(te).find(e=>e>=9229&&e<=9299)??9229:9229,t=d(e);if(!t||t.length===0){a(` no inspector on :${e}, sending SIGUSR1 to pid ${n}`);try{m(n,`SIGUSR1`),await h(2e3),t=d(e)}catch(e){a(Y.default.yellow(` SIGUSR1 delivery failed: ${e.message}`))}}if(t&&t.length>0){S(`inspector-endpoints.json`,JSON.stringify(t,null,2));let e=t[0].webSocketDebuggerUrl;if(e){a(` capturing ${r}s CPU profile`);let t=[];await f(e,g,n,x,e=>t.push(e))?a(` wrote cpu.cpuprofile`):a(Y.default.yellow(` CPU profile capture failed`)),t.length>0&&S(`process-stats.jsonl`,`${t.map(e=>JSON.stringify(e)).join(`
|
|
46
|
+
`)}\n`);try{S(`stacks.txt`,cc(B(F(x,`cpu.cpuprofile`),`utf-8`)))}catch(e){a(Y.default.yellow(` stacks.txt skipped: ${e.message}`))}}}else a(Y.default.yellow(` Node inspector unavailable — skipping CPU profile`))}a(``),a(Y.default.yellow(`⚠ Before sharing, review what each file contains:`)),a(` metadata.json — content directory paths, lock file locations, CPU/MEM at capture time`),a(` lsof.txt — all open files, network connections, and private paths for this process`),a(` inspector-endpoints.json — Node debugger metadata (titles, URLs)`),a(` cpu.cpuprofile — function names and source file paths from your Node process`),a(` stacks.txt — call stacks derived from cpu.cpuprofile; includes source paths`),a(` process-stats.jsonl — CPU/MEM/RSS numbers only; safe to share`),a(``),a(`Bundle: ${Y.default.bold(x)}`)}async function uc(e){let t=ci({input:process.stdin,output:process.stdout});try{return(await t.question(e)).trim()}finally{t.close()}}async function dc(e){let t=Yr(F(ri(),`ok-bundle-process-`));return await lc({pid:e,output:t}),t}function fc(e){if(e<1024)return`${e} B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)} KB`;let n=t/1024;return n<1024?`${n.toFixed(1)} MB`:`${(n/1024).toFixed(1)} GB`}function pc(e){let t=e.trim().toLowerCase();return t===`y`||t===`yes`}function mc(e){let{summary:t,manifest:n}=e;return t.redacted?t.contentDirVisible?`masked as <CONTENT_DIR>, but still present in some files`:`masked as <CONTENT_DIR>`:t.contentDirVisible?`visible (${n.contentDir.absolutePath})`:`not present`}function hc(e,t){let n=e.manifest.redaction.secretScrub;return n===void 0?Y.default.yellow(t>0?`NOT scrubbed (--no-redact): tokens and keys ship verbatim, crash reports excepted`:`NOT scrubbed (--no-redact): tokens and keys ship verbatim`):`scrubbed known credential formats (${n.redactedLineCount} line(s) across ${n.redactions.length} file(s))`}function gc(e,t,n,r){let{summary:i,manifest:a}=t;e(``),e(Y.default.bold(`ok diagnose bundle — what leaves this machine`)),e(``),e(` Files: ${i.fileCount}`),e(` Total size: ${fc(i.totalBytes)} uncompressed`),e(` Document names: included in cleartext (${i.docNameCount} doc.name occurrence(s) in telemetry)`),e(` Content-dir path: ${mc(t)}`),e(` Credentials: ${hc(t,i.stagedDiagnosticReports)}`),e(` Server status: ${a.serverStatus}`),e(` macOS crash reports: ${Qn(r,i.stagedDiagnosticReports)}`),i.stagedDiagnosticReports>0&&(e(` each carrying machine details macOS puts in every report: the`),e(` account uid, the Mac model, and the name of the process that`),e(` launched this app, which on a managed machine can be internal`),e(` tooling.`),e(` Rewritten on the way in: escaped path separators normalised so`),e(` the scrub can read them, and the identifiers that would link`),e(` this machine's bundles to each other replaced.`),e(` Not byte-identical to the files macOS wrote, on any tier and`),e(` regardless of --no-redact. A report of ours still names the`),e(` processes it was running alongside.`)),e(` Output: ${n}`),e(``)}async function _c(e,t={}){let n=t.log??(e=>console.log(e)),r=t.prompt??uc,i=t.runProcessDiagnose??dc,a=t.now??(()=>new Date),o;if(e.out!==void 0){o=e.out;let t=P(o);if(!R(t))throw Error(`ok diagnose bundle: --out parent directory does not exist: ${t}. Create it first.`)}else{let t=a().toISOString().replace(/[:.]/g,`-`),n=F(e.contentDir,`.ok`,`local`,`diagnostics`);z(n,{recursive:!0}),o=F(n,`bundle-${t}.zip`)}let s;e.pid!==void 0&&(n(Y.default.dim(`Running ok diagnose process ${e.pid} into a temp dir`)),s=await i(e.pid));let c=e.redact!==!1,l=ir(t.diagnosticReportsDir??F(U(),`Library`,`Logs`,`DiagnosticReports`),a()),u=await rr({contentDir:e.contentDir,projectDir:e.projectDir,processDir:s,redact:c,scrubSecrets:c,diagnosticReports:l,deps:t.collectDeps});try{return u.manifest.serverStatus===`not-running`&&n(Y.default.yellow(` server not running — live state unavailable`)),gc(n,u,o,l),e.yes!==!0&&!pc(await r(`Write bundle? [y/N]: `))?(n(Y.default.dim(`Aborted; no bundle written.`)),{outputPath:null,declined:!0}):(await ur({collected:u,outputPath:o}),n(Y.default.bold(`Bundle: ${o}`)),{outputPath:o,declined:!1})}finally{if(u.cleanup(),s!==void 0)try{ei(s,{recursive:!0,force:!0})}catch{}}}function vc(){let e=new D(`diagnose`).description(`Diagnostic utilities for open-knowledge processes`);return e.command(`process`).description(`Capture a diagnostic bundle (metadata, lsof, CPU profile) for a running process`).argument(`<pid>`,`Process ID to diagnose`).option(`--cpu-profile <seconds>`,`CPU profile duration (default: 15)`,`15`).option(`--output <dir>`,`Output directory`).option(`--no-inspector`,`Collect metadata only; skip Node inspector and CPU profile`).action(async(e,t)=>{let n=Number.parseInt(e,10);(Number.isNaN(n)||n<=0)&&(console.error(Y.default.red(`Invalid pid '${e}': must be a positive integer`)),process.exit(1));let r=Number.parseInt(t.cpuProfile,10);(Number.isNaN(r)||r<=0)&&(console.error(Y.default.red(`--cpu-profile must be a positive integer`)),process.exit(1)),await lc({pid:n,cpuProfileSecs:r,output:t.output,noInspector:!t.inspector})}),e.addCommand(tc()),e.command(`bundle`).description(`Capture a support bundle (telemetry + logs + server state) into a zip suitable for bug reports`).option(`--pid <pid>`,"Include `ok diagnose process <pid>` output under process/ in the bundle").option(`--out <path>`,`Write the zip to this path instead of the default location`).option(`--yes`,`Skip the y/N prompt`).option(`--no-redact`,`Write a raw bundle: skip credential scrubbing and content-dir path masking`).option(`--redact`,`Scrub credentials and mask the content-dir path (the default)`).action(async e=>{let t;e.pid!==void 0&&(t=Number.parseInt(e.pid,10),(Number.isNaN(t)||t<=0)&&(console.error(Y.default.red(`Invalid --pid '${e.pid}': must be a positive integer`)),process.exit(1)));try{let{loadConfig:n}=await import(`./loader-C9weUSCP.mjs`),{resolveContentDir:r}=await import(`./dist-s4KdL8xn.mjs`),i=process.cwd(),{config:a}=n(i);await _c({contentDir:r(a,i),projectDir:i,pid:t,out:e.out,yes:e.yes===!0,redact:e.redact})}catch(e){let t=e instanceof Error?e.message:String(e);console.error(Y.default.red(t)),process.exit(1)}}),e}async function yc(){if(!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString(`utf-8`).trim()}return(await Yi({message:`Enter embeddings provider API key:`})).trim()}function bc(e){return Fe(e)}async function xc(e,t){let n=await Ue(nn(),e,t);return n.apiKey?{present:!0,notRequired:!1,source:n.source}:{present:!1,notRequired:n.keyless,source:null}}async function Sc(e){try{let t=on(E(e));if(!t||t.port<=0||!dn(t.pid))return null;let n=await fetch(`http://127.0.0.1:${t.port}/api/semantic-status`,{signal:AbortSignal.timeout(1500)});if(!n.ok)return null;let r=await n.json();return typeof r.embedded!=`number`||typeof r.total!=`number`?null:{embedded:r.embedded,total:r.total}}catch{return null}}function Cc(){return new D(`set-key`).description(`Store the embeddings API key for THIS project's configured endpoint`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async e=>{let t=await yc();if(!t){process.stderr.write(`No key provided.
|
|
47
|
+
`),process.exitCode=1;return}let n=L(e.cwd??process.cwd()),{baseUrl:r}=bc(n);try{await nn().setForProject(n,r,t)}catch(e){process.stderr.write(`Failed to store the embeddings key: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings API key stored for ${r}\n (kept in ~/.ok/secrets.yml, 0600, this machine only — never in the project).
|
|
48
48
|
Enable semantic search with \`ok embeddings enable\`, or in
|
|
49
49
|
OK Desktop → Settings → This project → Search.
|
|
50
|
-
`)})}function wc(){return new
|
|
50
|
+
`)})}function wc(){return new D(`clear-key`).description(`Remove the embeddings API key for THIS project's configured endpoint`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async e=>{let t=L(e.cwd??process.cwd()),{baseUrl:n}=bc(t),r;try{r=await nn().clearForProject(t,n)}catch(e){process.stderr.write(`Failed to clear the embeddings key: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1;return}if(!r){process.stderr.write(`No stored embeddings key found for ${n}.\n`);return}process.stderr.write(`✓ Embeddings API key cleared for ${n}.\n`)})}function Tc(){return new D(`list`).description(`List every project + endpoint that has a stored embeddings key`).action(async()=>{let e=await nn().listProjects();if(e.length===0){process.stderr.write(`No project embeddings keys stored.
|
|
51
51
|
`);return}let t=[`Stored embeddings keys (this machine):`,``];for(let{projectKey:n,endpoints:r}of e){t.push(` ${n}`);for(let{endpoint:e,hint:n}of r)t.push(` ${e} → ${n?`••••${n}`:`set`}`)}process.stdout.write(`${t.join(`
|
|
52
|
-
`)}\n`)})}function Ec(){return new
|
|
53
|
-
`)})}function kc(){return new
|
|
54
|
-
`)}\n`)})}function Mc(){return new
|
|
55
|
-
`);if(e===-1)return null;let t=this._buffer.toString(`utf8`,0,e).replace(/\r$/,``);return this._buffer=this._buffer.subarray(e+1),Vc(t)}clear(){this._buffer=void 0}};function Vc(e){return
|
|
56
|
-
`}var Uc=class{constructor(e=Vr.stdin,t=Vr.stdout){this._stdin=e,this._stdout=t,this._readBuffer=new Bc,this._started=!1,this._ondata=e=>{this._readBuffer.append(e),this.processReadBuffer()},this._onerror=e=>{this.onerror?.(e)}}async start(){if(this._started)throw Error(`StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.`);this._started=!0,this._stdin.on(`data`,this._ondata),this._stdin.on(`error`,this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off(`data`,this._ondata),this._stdin.off(`error`,this._onerror),this._stdin.listenerCount(`data`)===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(t=>{let n=Hc(e);this._stdout.write(n)?t():this._stdout.once(`drain`,t)})}};function Wc(e){if(e.platform!==`darwin`)return{kind:`unchanged`};let t;try{t=e.realpath(e.bundleAnchorPath)}catch(e){return{kind:`unreadable`,reason:e instanceof Error?e.message:String(e)}}let n;try{n=e.statInode(t)}catch(e){return{kind:`unreadable`,reason:e instanceof Error?e.message:String(e)}}return n===e.currentInode?{kind:`unchanged`}:{kind:`replaced`,currentInode:e.currentInode,onDiskInode:n}}function Gc(e){let t=e.setInterval??setInterval,n=e.clearInterval??clearInterval,r=e.intervalMs??3e5,i=!0,a=!1,o=!1,s=t(()=>{if(!i)return;let t;try{t=e.detect()}catch(t){e.log(`bundle identity check threw unexpectedly (contract violation): ${t instanceof Error?t.message:String(t)}`);return}if(t.kind===`unreadable`){o||(o=!0,e.log(`bundle identity check unreadable${t.reason?`: ${t.reason}`:``} — will retry on next tick`));return}o&&(o=!1,e.log(`bundle identity check recovered from unreadable`)),t.kind!==`unchanged`&&(i=!1,e.onReplaced(t))},r);return typeof s.unref==`function`&&s.unref(),{stop:()=>{a||(a=!0,i=!1,n(s))}}}function Kc(e,t){let n;try{n=t.realpathSync(e)}catch(e){t.log(`[mcp] bundle identity boot capture unreadable (realpath failed): ${e instanceof Error?e.message:String(e)}`);return}let r;try{r=t.statInoSync(n)}catch(e){t.log(`[mcp] bundle identity boot capture unreadable (stat failed): ${e instanceof Error?e.message:String(e)}`);return}return{resolvedPath:n,inode:r}}function qc(e){let t=e.scheduler??{setInterval:(e,t)=>globalThis.setInterval(e,t),clearInterval:e=>globalThis.clearInterval(e)},n=e.getPpid();if(n<=1)return{stop:()=>{}};let r=!1,i=t.setInterval(()=>{if(r)return;let a=e.getPpid();a!==n&&(r=!0,t.clearInterval(i),e.onHostGone(`host process exited (ppid ${n} -> ${a})`))},e.intervalMs??1e3);return i.unref?.(),{stop:()=>t.clearInterval(i)}}function Jc(e){let t=t=>{try{e.log(t)}catch{}},n=e.transport.onclose;e.transport.onclose=()=>{t(`[mcp] stdio transport closed (internal shutdown)`),n?.()},e.stdin.once(`end`,()=>t(`[mcp] stdin EOF (host closed pipe)`)),e.stdin.once(`close`,()=>t(`[mcp] stdin closed`)),e.process.on(`exit`,e=>{t(`[mcp] exit code=${e}`)}),e.process.on(`uncaughtExceptionMonitor`,(e,n)=>{let r=e instanceof Error?e.stack??e.message:String(e);t(`[mcp] uncaughtException origin=${n}: ${r}`)})}function Yc(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}function Xc(e=fetch,t){return t?async(n,r)=>e(n,{...t,...r,headers:r?.headers?{...Yc(t.headers),...Yc(r.headers)}:t.headers}):e}let Zc;Zc=globalThis.crypto?.webcrypto??globalThis.crypto??import(`node:crypto`).then(e=>e.webcrypto);async function Qc(e){return(await Zc).getRandomValues(new Uint8Array(e))}async function $c(e){let t=``;for(;t.length<e;){let n=await Qc(e-t.length);for(let e of n)e<198&&(t+=`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~`[e%66])}return t}async function el(e){return await $c(e)}async function tl(e){let t=await(await Zc).subtle.digest(`SHA-256`,new TextEncoder().encode(e));return btoa(String.fromCharCode(...new Uint8Array(t))).replace(/\//g,`_`).replace(/\+/g,`-`).replace(/=/g,``)}async function nl(e){if(e||=43,e<43||e>128)throw`Expected a length between 43 and 128. Received ${e}.`;let t=await el(e);return{code_verifier:t,code_challenge:await tl(t)}}const X=u().superRefine((e,t)=>{if(!URL.canParse(e))return t.addIssue({code:ci.custom,message:`URL must be parseable`,fatal:!0}),de}).refine(e=>{let t=new URL(e);return t.protocol!==`javascript:`&&t.protocol!==`data:`&&t.protocol!==`vbscript:`},{message:`URL cannot use javascript:, data:, or vbscript: scheme`}),rl=h({resource:w().url(),authorization_servers:a(X).optional(),jwks_uri:w().url().optional(),scopes_supported:a(w()).optional(),bearer_methods_supported:a(w()).optional(),resource_signing_alg_values_supported:a(w()).optional(),resource_name:w().optional(),resource_documentation:w().optional(),resource_policy_uri:w().url().optional(),resource_tos_uri:w().url().optional(),tls_client_certificate_bound_access_tokens:r().optional(),authorization_details_types_supported:a(w()).optional(),dpop_signing_alg_values_supported:a(w()).optional(),dpop_bound_access_tokens_required:r().optional()}),il=h({issuer:w(),authorization_endpoint:X,token_endpoint:X,registration_endpoint:X.optional(),scopes_supported:a(w()).optional(),response_types_supported:a(w()),response_modes_supported:a(w()).optional(),grant_types_supported:a(w()).optional(),token_endpoint_auth_methods_supported:a(w()).optional(),token_endpoint_auth_signing_alg_values_supported:a(w()).optional(),service_documentation:X.optional(),revocation_endpoint:X.optional(),revocation_endpoint_auth_methods_supported:a(w()).optional(),revocation_endpoint_auth_signing_alg_values_supported:a(w()).optional(),introspection_endpoint:w().optional(),introspection_endpoint_auth_methods_supported:a(w()).optional(),introspection_endpoint_auth_signing_alg_values_supported:a(w()).optional(),code_challenge_methods_supported:a(w()).optional(),client_id_metadata_document_supported:r().optional()}),al=h({issuer:w(),authorization_endpoint:X,token_endpoint:X,userinfo_endpoint:X.optional(),jwks_uri:X,registration_endpoint:X.optional(),scopes_supported:a(w()).optional(),response_types_supported:a(w()),response_modes_supported:a(w()).optional(),grant_types_supported:a(w()).optional(),acr_values_supported:a(w()).optional(),subject_types_supported:a(w()),id_token_signing_alg_values_supported:a(w()),id_token_encryption_alg_values_supported:a(w()).optional(),id_token_encryption_enc_values_supported:a(w()).optional(),userinfo_signing_alg_values_supported:a(w()).optional(),userinfo_encryption_alg_values_supported:a(w()).optional(),userinfo_encryption_enc_values_supported:a(w()).optional(),request_object_signing_alg_values_supported:a(w()).optional(),request_object_encryption_alg_values_supported:a(w()).optional(),request_object_encryption_enc_values_supported:a(w()).optional(),token_endpoint_auth_methods_supported:a(w()).optional(),token_endpoint_auth_signing_alg_values_supported:a(w()).optional(),display_values_supported:a(w()).optional(),claim_types_supported:a(w()).optional(),claims_supported:a(w()).optional(),service_documentation:w().optional(),claims_locales_supported:a(w()).optional(),ui_locales_supported:a(w()).optional(),claims_parameter_supported:r().optional(),request_parameter_supported:r().optional(),request_uri_parameter_supported:r().optional(),require_request_uri_registration:r().optional(),op_policy_uri:X.optional(),op_tos_uri:X.optional(),client_id_metadata_document_supported:r().optional()}),ol=s({...al.shape,...il.pick({code_challenge_methods_supported:!0}).shape}),sl=s({access_token:w(),id_token:w().optional(),token_type:w(),expires_in:ui().optional(),scope:w().optional(),refresh_token:w().optional()}).strip(),cl=s({error:w(),error_description:w().optional(),error_uri:w().optional()}),ll=X.optional().or(p(``).transform(()=>void 0)),ul=s({redirect_uris:a(X),token_endpoint_auth_method:w().optional(),grant_types:a(w()).optional(),response_types:a(w()).optional(),client_name:w().optional(),client_uri:X.optional(),logo_uri:ll,scope:w().optional(),contacts:a(w()).optional(),tos_uri:ll,policy_uri:w().optional(),jwks_uri:X.optional(),jwks:S().optional(),software_id:w().optional(),software_version:w().optional(),software_statement:w().optional()}).strip(),dl=s({client_id:w(),client_secret:w().optional(),client_id_issued_at:g().optional(),client_secret_expires_at:g().optional()}).strip(),fl=ul.merge(dl);s({error:w(),error_description:w().optional()}).strip(),s({token:w(),token_type_hint:w().optional()}).strip();function pl(e){let t=typeof e==`string`?new URL(e):new URL(e.href);return t.hash=``,t}function ml({requestedResource:e,configuredResource:t}){let n=typeof e==`string`?new URL(e):new URL(e.href),r=typeof t==`string`?new URL(t):new URL(t.href);if(n.origin!==r.origin||n.pathname.length<r.pathname.length)return!1;let i=n.pathname.endsWith(`/`)?n.pathname:n.pathname+`/`,a=r.pathname.endsWith(`/`)?r.pathname:r.pathname+`/`;return i.startsWith(a)}var Z=class extends Error{constructor(e,t){super(e),this.errorUri=t,this.name=this.constructor.name}toResponseObject(){let e={error:this.errorCode,error_description:this.message};return this.errorUri&&(e.error_uri=this.errorUri),e}get errorCode(){return this.constructor.errorCode}},hl=class extends Z{};hl.errorCode=`invalid_request`;var gl=class extends Z{};gl.errorCode=`invalid_client`;var _l=class extends Z{};_l.errorCode=`invalid_grant`;var vl=class extends Z{};vl.errorCode=`unauthorized_client`;var yl=class extends Z{};yl.errorCode=`unsupported_grant_type`;var bl=class extends Z{};bl.errorCode=`invalid_scope`;var xl=class extends Z{};xl.errorCode=`access_denied`;var Sl=class extends Z{};Sl.errorCode=`server_error`;var Cl=class extends Z{};Cl.errorCode=`temporarily_unavailable`;var wl=class extends Z{};wl.errorCode=`unsupported_response_type`;var Tl=class extends Z{};Tl.errorCode=`unsupported_token_type`;var El=class extends Z{};El.errorCode=`invalid_token`;var Dl=class extends Z{};Dl.errorCode=`method_not_allowed`;var Ol=class extends Z{};Ol.errorCode=`too_many_requests`;var kl=class extends Z{};kl.errorCode=`invalid_client_metadata`;var Al=class extends Z{};Al.errorCode=`insufficient_scope`;var jl=class extends Z{};jl.errorCode=`invalid_target`;const Ml={[hl.errorCode]:hl,[gl.errorCode]:gl,[_l.errorCode]:_l,[vl.errorCode]:vl,[yl.errorCode]:yl,[bl.errorCode]:bl,[xl.errorCode]:xl,[Sl.errorCode]:Sl,[Cl.errorCode]:Cl,[wl.errorCode]:wl,[Tl.errorCode]:Tl,[El.errorCode]:El,[Dl.errorCode]:Dl,[Ol.errorCode]:Ol,[kl.errorCode]:kl,[Al.errorCode]:Al,[jl.errorCode]:jl};var Nl=class extends Error{constructor(e){super(e??`Unauthorized`)}};function Pl(e){return[`client_secret_basic`,`client_secret_post`,`none`].includes(e)}const Fl=`code`,Il=`S256`;function Ll(e,t){let n=e.client_secret!==void 0;return`token_endpoint_auth_method`in e&&e.token_endpoint_auth_method&&Pl(e.token_endpoint_auth_method)&&(t.length===0||t.includes(e.token_endpoint_auth_method))?e.token_endpoint_auth_method:t.length===0?n?`client_secret_basic`:`none`:n&&t.includes(`client_secret_basic`)?`client_secret_basic`:n&&t.includes(`client_secret_post`)?`client_secret_post`:t.includes(`none`)?`none`:n?`client_secret_post`:`none`}function Rl(e,t,n,r){let{client_id:i,client_secret:a}=t;switch(e){case`client_secret_basic`:zl(i,a,n);return;case`client_secret_post`:Bl(i,a,r);return;case`none`:Vl(i,r);return;default:throw Error(`Unsupported client authentication method: ${e}`)}}function zl(e,t,n){if(!t)throw Error(`client_secret_basic authentication requires a client_secret`);let r=btoa(`${e}:${t}`);n.set(`Authorization`,`Basic ${r}`)}function Bl(e,t,n){n.set(`client_id`,e),t&&n.set(`client_secret`,t)}function Vl(e,t){t.set(`client_id`,e)}async function Hl(e){let t=e instanceof Response?e.status:void 0,n=e instanceof Response?await e.text():e;try{let{error:e,error_description:t,error_uri:r}=cl.parse(JSON.parse(n));return new(Ml[e]||Sl)(t||``,r)}catch(e){return new Sl(`${t?`HTTP ${t}: `:``}Invalid OAuth error response: ${e}. Raw body: ${n}`)}}async function Ul(e,t){try{return await Wl(e,t)}catch(n){if(n instanceof gl||n instanceof vl)return await e.invalidateCredentials?.(`all`),await Wl(e,t);if(n instanceof _l)return await e.invalidateCredentials?.(`tokens`),await Wl(e,t);throw n}}async function Wl(e,{serverUrl:t,authorizationCode:n,scope:r,resourceMetadataUrl:i,fetchFn:a}){let o=await e.discoveryState?.(),s,c,l,u=i;if(!u&&o?.resourceMetadataUrl&&(u=new URL(o.resourceMetadataUrl)),o?.authorizationServerUrl){if(c=o.authorizationServerUrl,s=o.resourceMetadata,l=o.authorizationServerMetadata??await nu(c,{fetchFn:a}),!s)try{s=await Yl(t,{resourceMetadataUrl:u},a)}catch{}(l!==o.authorizationServerMetadata||s!==o.resourceMetadata)&&await e.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:u?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}else{let n=await ru(t,{resourceMetadataUrl:u,fetchFn:a});c=n.authorizationServerUrl,l=n.authorizationServerMetadata,s=n.resourceMetadata,await e.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:u?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}let d=await Kl(t,e,s),f=r||s?.scopes_supported?.join(` `)||e.clientMetadata.scope,p=await Promise.resolve(e.clientInformation());if(!p){if(n!==void 0)throw Error(`Existing OAuth client information is required when exchanging an authorization code`);let t=l?.client_id_metadata_document_supported===!0,r=e.clientMetadataUrl;if(r&&!Gl(r))throw new kl(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${r}`);if(t&&r)p={client_id:r},await e.saveClientInformation?.(p);else{if(!e.saveClientInformation)throw Error(`OAuth client information must be saveable for dynamic registration`);let t=await lu(c,{metadata:l,clientMetadata:e.clientMetadata,scope:f,fetchFn:a});await e.saveClientInformation(t),p=t}}let m=!e.redirectUrl;if(n!==void 0||m){let t=await cu(e,c,{metadata:l,resource:d,authorizationCode:n,fetchFn:a});return await e.saveTokens(t),`AUTHORIZED`}let h=await e.tokens();if(h?.refresh_token)try{let t=await su(c,{metadata:l,clientInformation:p,refreshToken:h.refresh_token,resource:d,addClientAuthentication:e.addClientAuthentication,fetchFn:a});return await e.saveTokens(t),`AUTHORIZED`}catch(e){if(!(!(e instanceof Z)||e instanceof Sl))throw e}let g=e.state?await e.state():void 0,{authorizationUrl:_,codeVerifier:v}=await iu(c,{metadata:l,clientInformation:p,state:g,redirectUrl:e.redirectUrl,scope:f,resource:d});return await e.saveCodeVerifier(v),await e.redirectToAuthorization(_),`REDIRECT`}function Gl(e){if(!e)return!1;try{let t=new URL(e);return t.protocol===`https:`&&t.pathname!==`/`}catch{return!1}}async function Kl(e,t,n){let r=pl(e);if(t.validateResourceURL)return await t.validateResourceURL(r,n?.resource);if(n){if(!ml({requestedResource:r,configuredResource:n.resource}))throw Error(`Protected resource ${n.resource} does not match expected ${r} (or origin)`);return new URL(n.resource)}}function ql(e){let t=e.headers.get(`WWW-Authenticate`);if(!t)return{};let[n,r]=t.split(` `);if(n.toLowerCase()!==`bearer`||!r)return{};let i=Jl(e,`resource_metadata`)||void 0,a;if(i)try{a=new URL(i)}catch{}let o=Jl(e,`scope`)||void 0,s=Jl(e,`error`)||void 0;return{resourceMetadataUrl:a,scope:o,error:s}}function Jl(e,t){let n=e.headers.get(`WWW-Authenticate`);if(!n)return null;let r=RegExp(`${t}=(?:"([^"]+)"|([^\\s,]+))`),i=n.match(r);return i?i[1]||i[2]:null}async function Yl(e,t,n=fetch){let r=await eu(e,`oauth-protected-resource`,n,{protocolVersion:t?.protocolVersion,metadataUrl:t?.resourceMetadataUrl});if(!r||r.status===404)throw await r?.body?.cancel(),Error(`Resource server does not implement OAuth 2.0 Protected Resource Metadata.`);if(!r.ok)throw await r.body?.cancel(),Error(`HTTP ${r.status} trying to load well-known OAuth protected resource metadata.`);return rl.parse(await r.json())}async function Xl(e,t,n=fetch){try{return await n(e,{headers:t})}catch(r){if(r instanceof TypeError)return t?Xl(e,void 0,n):void 0;throw r}}function Zl(e,t=``,n={}){return t.endsWith(`/`)&&(t=t.slice(0,-1)),n.prependPathname?`${t}/.well-known/${e}`:`/.well-known/${e}${t}`}async function Ql(e,t,n=fetch){return await Xl(e,{"MCP-Protocol-Version":t},n)}function $l(e,t){return!e||e.status>=400&&e.status<500&&t!==`/`}async function eu(e,t,n,r){let i=new URL(e),a=r?.protocolVersion??`2025-11-25`,o;if(r?.metadataUrl)o=new URL(r.metadataUrl);else{let e=Zl(t,i.pathname);o=new URL(e,r?.metadataServerUrl??i),o.search=i.search}let s=await Ql(o,a,n);return!r?.metadataUrl&&$l(s,i.pathname)&&(s=await Ql(new URL(`/.well-known/${t}`,i),a,n)),s}function tu(e){let t=typeof e==`string`?new URL(e):e,n=t.pathname!==`/`,r=[];if(!n)return r.push({url:new URL(`/.well-known/oauth-authorization-server`,t.origin),type:`oauth`}),r.push({url:new URL(`/.well-known/openid-configuration`,t.origin),type:`oidc`}),r;let i=t.pathname;return i.endsWith(`/`)&&(i=i.slice(0,-1)),r.push({url:new URL(`/.well-known/oauth-authorization-server${i}`,t.origin),type:`oauth`}),r.push({url:new URL(`/.well-known/openid-configuration${i}`,t.origin),type:`oidc`}),r.push({url:new URL(`${i}/.well-known/openid-configuration`,t.origin),type:`oidc`}),r}async function nu(e,{fetchFn:t=fetch,protocolVersion:n=Rt}={}){let r={"MCP-Protocol-Version":n,Accept:`application/json`},i=tu(e);for(let{url:e,type:n}of i){let i=await Xl(e,r,t);if(i){if(!i.ok){if(await i.body?.cancel(),i.status>=400&&i.status<500)continue;throw Error(`HTTP ${i.status} trying to load ${n===`oauth`?`OAuth`:`OpenID provider`} metadata from ${e}`)}return n===`oauth`?il.parse(await i.json()):ol.parse(await i.json())}}}async function ru(e,t){let n,r;try{n=await Yl(e,{resourceMetadataUrl:t?.resourceMetadataUrl},t?.fetchFn),n.authorization_servers&&n.authorization_servers.length>0&&(r=n.authorization_servers[0])}catch{}r||=String(new URL(`/`,e));let i=await nu(r,{fetchFn:t?.fetchFn});return{authorizationServerUrl:r,authorizationServerMetadata:i,resourceMetadata:n}}async function iu(e,{metadata:t,clientInformation:n,redirectUrl:r,scope:i,state:a,resource:o}){let s;if(t){if(s=new URL(t.authorization_endpoint),!t.response_types_supported.includes(Fl))throw Error(`Incompatible auth server: does not support response type ${Fl}`);if(t.code_challenge_methods_supported&&!t.code_challenge_methods_supported.includes(Il))throw Error(`Incompatible auth server: does not support code challenge method ${Il}`)}else s=new URL(`/authorize`,e);let c=await nl(),l=c.code_verifier,u=c.code_challenge;return s.searchParams.set(`response_type`,Fl),s.searchParams.set(`client_id`,n.client_id),s.searchParams.set(`code_challenge`,u),s.searchParams.set(`code_challenge_method`,Il),s.searchParams.set(`redirect_uri`,String(r)),a&&s.searchParams.set(`state`,a),i&&s.searchParams.set(`scope`,i),i?.includes(`offline_access`)&&s.searchParams.append(`prompt`,`consent`),o&&s.searchParams.set(`resource`,o.href),{authorizationUrl:s,codeVerifier:l}}function au(e,t,n){return new URLSearchParams({grant_type:`authorization_code`,code:e,code_verifier:t,redirect_uri:String(n)})}async function ou(e,{metadata:t,tokenRequestParams:n,clientInformation:r,addClientAuthentication:i,resource:a,fetchFn:o}){let s=t?.token_endpoint?new URL(t.token_endpoint):new URL(`/token`,e),c=new Headers({"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`});a&&n.set(`resource`,a.href),i?await i(c,n,s,t):r&&Rl(Ll(r,t?.token_endpoint_auth_methods_supported??[]),r,c,n);let l=await(o??fetch)(s,{method:`POST`,headers:c,body:n});if(!l.ok)throw await Hl(l);return sl.parse(await l.json())}async function su(e,{metadata:t,clientInformation:n,refreshToken:r,resource:i,addClientAuthentication:a,fetchFn:o}){return{refresh_token:r,...await ou(e,{metadata:t,tokenRequestParams:new URLSearchParams({grant_type:`refresh_token`,refresh_token:r}),clientInformation:n,addClientAuthentication:a,resource:i,fetchFn:o})}}async function cu(e,t,{metadata:n,resource:r,authorizationCode:i,fetchFn:a}={}){let o=e.clientMetadata.scope,s;if(e.prepareTokenRequest&&(s=await e.prepareTokenRequest(o)),!s){if(!i)throw Error(`Either provider.prepareTokenRequest() or authorizationCode is required`);if(!e.redirectUrl)throw Error(`redirectUrl is required for authorization_code flow`);s=au(i,await e.codeVerifier(),e.redirectUrl)}let c=await e.clientInformation();return ou(t,{metadata:n,tokenRequestParams:s,clientInformation:c??void 0,addClientAuthentication:e.addClientAuthentication,resource:r,fetchFn:a})}async function lu(e,{metadata:t,clientMetadata:n,scope:r,fetchFn:i}){let a;if(t){if(!t.registration_endpoint)throw Error(`Incompatible auth server: does not support dynamic client registration`);a=new URL(t.registration_endpoint)}else a=new URL(`/register`,e);let o=await(i??fetch)(a,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...n,...r===void 0?{}:{scope:r}})});if(!o.ok)throw await Hl(o);return fl.parse(await o.json())}var uu=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function du(e){}function fu(e){if(typeof e==`function`)throw TypeError("`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?");let{onEvent:t=du,onError:n=du,onRetry:r=du,onComment:i,maxBufferSize:a}=e,o=[],s=0,c=!0,l,u=``,d=0,f,p=!1;function m(e){if(p)throw Error("Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing.");if(c&&(c=!1,e.charCodeAt(0)===239&&e.charCodeAt(1)===187&&e.charCodeAt(2)===191&&(e=e.slice(3))),o.length===0){let t=g(e);t!==``&&(o.push(t),s=t.length),h();return}if(e.indexOf(`
|
|
52
|
+
`)}\n`)})}function Ec(){return new D(`set-url`).description(`Set the embeddings API endpoint for this project (project-local)`).argument(`<url>`,`OpenAI-compatible base URL, e.g. https://api.openai.com/v1`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async(e,t)=>{let n=e.trim(),r=h(n);if(r!==null){process.stderr.write(r===`invalid-url`?`Not a valid URL: ${e}\n`:`Refusing an insecure endpoint: use https:// (http:// is allowed only for localhost). Got: ${e}\n`),process.exitCode=1;return}let i=L(t.cwd??process.cwd()),a=await Je({cwd:i,scope:`project-local`,patch:{search:{semantic:{baseUrl:n}}}});if(!a.ok){process.stderr.write(`Failed to set the embeddings endpoint — ${v(a.error)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings endpoint set to ${n} for ${i}\n`)})}function Dc(){return new D(`clear-url`).description(`Reset the embeddings API endpoint to the default OpenAI endpoint (project-local)`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async e=>{let t=L(e.cwd??process.cwd()),n=await Je({cwd:t,scope:`project-local`,patch:{search:{semantic:{baseUrl:Ce}}}});if(!n.ok){process.stderr.write(`Failed to reset the embeddings endpoint — ${v(n.error)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings endpoint reset to ${Ce} for ${t}\n`)})}function Oc(){return new D(`set-model`).description(`Set the embeddings model for this project (project-local)`).argument(`<model>`,`Model id served by the configured endpoint, e.g. nomic-embed-text`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async(e,t)=>{let n=e.trim();if(!n){process.stderr.write("Model id cannot be empty. Use `clear-model` to reset the default.\n"),process.exitCode=1;return}let r=L(t.cwd??process.cwd()),i=await Je({cwd:r,scope:`project-local`,patch:{search:{semantic:{model:n}}}});if(!i.ok){process.stderr.write(`Failed to set the embeddings model — ${v(i.error)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings model set to ${n} for ${r}\n Changing the model re-embeds the corpus on the next search.
|
|
53
|
+
`)})}function kc(){return new D(`clear-model`).description(`Reset the embeddings model to ${Ee} (project-local)`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async e=>{let t=L(e.cwd??process.cwd()),n=await Je({cwd:t,scope:`project-local`,patch:{search:{semantic:{model:Ee}}}});if(!n.ok){process.stderr.write(`Failed to reset the embeddings model — ${v(n.error)}\n`),process.exitCode=1;return}process.stderr.write(`✓ Embeddings model reset to ${Ee} for ${t}\n`)})}function Ac(e,t){return new D(e).description(`Turn semantic search ${t?`on`:`off`} for this project (project-local)`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).action(async n=>{let r=L(n.cwd??process.cwd()),i=await Je({cwd:r,scope:`project-local`,patch:{search:{semantic:{enabled:t}}}});if(!i.ok){process.stderr.write(`Failed to ${e} semantic search — ${v(i.error)}\n`),process.exitCode=1;return}if(process.stderr.write(`✓ Semantic search ${t?`enabled`:`disabled`} for ${r}\n`),t){let{present:e,notRequired:t}=await xc(r,bc(r).baseUrl);!e&&!t&&process.stderr.write(" Note: no API key set yet — run `ok embeddings set-key`. Until then, search stays lexical.\n")}})}function jc(){return new D(`status`).description(`Show semantic-search capability: key presence, enabled, coverage, provider`).option(`--cwd <path>`,`Project directory (defaults to the current directory)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=L(e.cwd??process.cwd()),n=bc(t),{present:r,notRequired:i,source:a}=await xc(t,n.baseUrl),o=n.enabled&&(r||i),s=o?await Sc(t):null;if(e.json){process.stdout.write(`${JSON.stringify({project:t,key:{present:r,notRequired:i,source:a},project_config:{enabled:n.enabled,capable:o,coverage:s?{embedded:s.embedded,total:s.total}:null,provider:{baseUrl:n.baseUrl,model:n.model,dimensions:n.dimensions??null},transport:{maxBatchSize:n.maxBatchSize,maxBatchChars:n.maxBatchChars,docTimeoutMs:n.docTimeoutMs}}})}\n`);return}let c=r?`set for this endpoint — ${a===`env`?`environment (${ze})`:`~/.ok/secrets.yml`}`:i?`not required (localhost endpoint)`:`not set`,l=o?s?`${s.embedded} / ${s.total} pages embedded`:`server not running — start it to index (or it has not embedded yet)`:null,u=[`Semantic search`,` project: ${t}`,``,` This project:`,` enabled: ${n.enabled?`yes`:`no`}`,` API key: ${c}`,` capability: ${o?`AVAILABLE`:`unavailable (search stays lexical)`}`,...l?[` coverage: ${l}`]:[],` provider: ${n.baseUrl}`,` model: ${n.model}`,` dimensions: ${n.dimensions??`auto (detected from the endpoint)`}`,` batch size: ${n.maxBatchSize} chunks maximum per indexing request`,` characters: ${n.maxBatchChars} approximate characters per indexing request`,` timeout: ${n.docTimeoutMs} ms per indexing request attempt`],d=[];!r&&!i&&d.push(`Set a key: ok embeddings set-key (or export ${ze})`),n.enabled||d.push(`Enable it: ok embeddings enable (in this project folder)`),d.length>0&&u.push(``,...d.map(e=>` ${e}`)),process.stdout.write(`${u.join(`
|
|
54
|
+
`)}\n`)})}function Mc(){return new D(`embeddings`).description(`Manage the semantic-search embeddings provider key + status`).addCommand(Cc()).addCommand(wc()).addCommand(Ec()).addCommand(Dc()).addCommand(Oc()).addCommand(kc()).addCommand(Ac(`enable`,!0)).addCommand(Ac(`disable`,!1)).addCommand(Tc()).addCommand(jc())}const Nc=F(`Contents`,`Resources`,`cli`,`bin`,`ok.sh`),Pc=/Contents\/Resources\/cli\/dist\/cli\.mjs$/;function Fc(e,t,n){return e===`darwin`?[F(t,`Applications`,`OpenKnowledge.app`,Nc),F(`/Applications`,`OpenKnowledge.app`,Nc)].find(e=>n.existsSync(e))??null:null}function Ic(e,t,n){if(n!==`darwin`)return{proxy:!1,suppressedBy:`platform`};let r=e.OK_BUNDLE_PROXY?.toLowerCase();return r===`0`||r===`false`?{proxy:!1,suppressedBy:`env`}:t.includes(`--no-bundle-proxy`)?{proxy:!1,suppressedBy:`flag`}:typeof t[1]==`string`&&Pc.test(t[1])?{proxy:!1,suppressedBy:`self`}:{proxy:!0,suppressedBy:null}}function Lc(e){e.stderr.write(`${JSON.stringify({event:`mcp-bundle-proxy`,mode:e.mode,bundlePath:e.bundlePath,reason:e.reason,hint:`Suppress with --no-bundle-proxy or OK_BUNDLE_PROXY=0.`})}\n`)}function Rc(e){Lc({stderr:e.stderr,mode:`bundled`,bundlePath:e.bundlePath,reason:null});let t=e.spawnImpl??Fr,n=e.exitProcess??(e=>process.exit(e)),r=e.now??(()=>Date.now()),i=r(),a=e.startupFailureWindowMs??1e3;return new Promise((o,s)=>{let c=t(e.bundlePath,e.argv.filter(e=>e!==`--no-bundle-proxy`),{env:{...e.env,OK_BUNDLE_PROXY:`0`},stdio:`inherit`,windowsHide:!0}),l=e=>{c.kill(e)},u=()=>{process.off(`SIGTERM`,l),process.off(`SIGINT`,l)};process.on(`SIGTERM`,l),process.on(`SIGINT`,l),c.once(`error`,e=>{u(),s(e)}),c.once(`exit`,(e,t)=>{if(u(),t){s(Error(`bundle process exited by signal ${t}`));return}let o=e??0,c=r()-i;if(o!==0&&c<=a){s(Error(`bundle process exited during startup with code ${o}`));return}n(o)})})}function zc(e){let t=e.scheduler??{setTimeout:(e,t)=>globalThis.setTimeout(e,t),clearTimeout:e=>globalThis.clearTimeout(e)},n=e.initialBackoffMs??1e3,r=e.maxBackoffMs??3e4,i=e.rng??Math.random,a=e.createWebSocket??(e=>new WebSocket(e)),o=e.logger??null,s=e.log,c=null,l=null,u=!1,d=n;function f(e,t,n){try{o?o[e](t,n):s?.(t)}catch{}}function p(){if(u)return;l!==null&&t.clearTimeout(l);let e=d;d=Math.min(d*2,r);let n=i(),a=Math.max(1,Math.floor(e*(1-n/2)));f(`debug`,`scheduling reconnect`,{backoffMs:a,ceilMs:e}),l=t.setTimeout(()=>{l=null,m().catch(e=>f(`warn`,`reconnect failed`,{error:String(e)}))},a)}async function m(){if(u)return;let t;try{t=await e.resolveWsUrl()}catch(e){f(`warn`,`resolveWsUrl threw`,{error:String(e)}),p();return}if(!t){p();return}let r=[];e.pid!==void 0&&r.push(`pid=${encodeURIComponent(String(e.pid))}`),e.connectionId&&r.push(`connectionId=${encodeURIComponent(e.connectionId)}`),e.connectionId&&e.displayName!==void 0&&e.clientName!==void 0&&e.colorSeed!==void 0&&(r.push(`displayName=${encodeURIComponent(e.displayName)}`),r.push(`clientName=${encodeURIComponent(e.clientName)}`),r.push(`colorSeed=${encodeURIComponent(e.colorSeed)}`));let i=r.length>0?`?${r.join(`&`)}`:``,o=`${t}/collab/keepalive${i}`;try{c=a(o)}catch(e){f(`warn`,`WebSocket constructor failed`,{url:o,error:String(e)}),c=null,p();return}c.addEventListener(`open`,()=>{f(`info`,`connected`,{url:t}),d=n}),c.addEventListener(`close`,()=>{u||(f(`info`,`disconnected`,{url:t}),c=null,p())}),c.addEventListener(`error`,()=>{f(`debug`,`websocket error observed`,{url:t,readyState:c?.readyState,reason:`error-event`})})}return queueMicrotask(()=>{m().catch(e=>f(`warn`,`initial connect failed`,{error:String(e)}))}),{close:()=>{if(!u&&(u=!0,l!==null&&(t.clearTimeout(l),l=null),c)){try{c.close()}catch{}c=null}},isConnected:()=>c!==null&&c.readyState===1}}var Bc=class{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(`
|
|
55
|
+
`);if(e===-1)return null;let t=this._buffer.toString(`utf8`,0,e).replace(/\r$/,``);return this._buffer=this._buffer.subarray(e+1),Vc(t)}clear(){this._buffer=void 0}};function Vc(e){return xt.parse(JSON.parse(e))}function Hc(e){return JSON.stringify(e)+`
|
|
56
|
+
`}var Uc=class{constructor(e=Hr.stdin,t=Hr.stdout){this._stdin=e,this._stdout=t,this._readBuffer=new Bc,this._started=!1,this._ondata=e=>{this._readBuffer.append(e),this.processReadBuffer()},this._onerror=e=>{this.onerror?.(e)}}async start(){if(this._started)throw Error(`StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.`);this._started=!0,this._stdin.on(`data`,this._ondata),this._stdin.on(`error`,this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off(`data`,this._ondata),this._stdin.off(`error`,this._onerror),this._stdin.listenerCount(`data`)===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(t=>{let n=Hc(e);this._stdout.write(n)?t():this._stdout.once(`drain`,t)})}};function Wc(e){if(e.platform!==`darwin`)return{kind:`unchanged`};let t;try{t=e.realpath(e.bundleAnchorPath)}catch(e){return{kind:`unreadable`,reason:e instanceof Error?e.message:String(e)}}let n;try{n=e.statInode(t)}catch(e){return{kind:`unreadable`,reason:e instanceof Error?e.message:String(e)}}return n===e.currentInode?{kind:`unchanged`}:{kind:`replaced`,currentInode:e.currentInode,onDiskInode:n}}function Gc(e){let t=e.setInterval??setInterval,n=e.clearInterval??clearInterval,r=e.intervalMs??3e5,i=!0,a=!1,o=!1,s=t(()=>{if(!i)return;let t;try{t=e.detect()}catch(t){e.log(`bundle identity check threw unexpectedly (contract violation): ${t instanceof Error?t.message:String(t)}`);return}if(t.kind===`unreadable`){o||(o=!0,e.log(`bundle identity check unreadable${t.reason?`: ${t.reason}`:``} — will retry on next tick`));return}o&&(o=!1,e.log(`bundle identity check recovered from unreadable`)),t.kind!==`unchanged`&&(i=!1,e.onReplaced(t))},r);return typeof s.unref==`function`&&s.unref(),{stop:()=>{a||(a=!0,i=!1,n(s))}}}function Kc(e,t){let n;try{n=t.realpathSync(e)}catch(e){t.log(`[mcp] bundle identity boot capture unreadable (realpath failed): ${e instanceof Error?e.message:String(e)}`);return}let r;try{r=t.statInoSync(n)}catch(e){t.log(`[mcp] bundle identity boot capture unreadable (stat failed): ${e instanceof Error?e.message:String(e)}`);return}return{resolvedPath:n,inode:r}}function qc(e){let t=e.scheduler??{setInterval:(e,t)=>globalThis.setInterval(e,t),clearInterval:e=>globalThis.clearInterval(e)},n=e.getPpid();if(n<=1)return{stop:()=>{}};let r=!1,i=t.setInterval(()=>{if(r)return;let a=e.getPpid();a!==n&&(r=!0,t.clearInterval(i),e.onHostGone(`host process exited (ppid ${n} -> ${a})`))},e.intervalMs??1e3);return i.unref?.(),{stop:()=>t.clearInterval(i)}}function Jc(e){let t=t=>{try{e.log(t)}catch{}},n=e.transport.onclose;e.transport.onclose=()=>{t(`[mcp] stdio transport closed (internal shutdown)`),n?.()},e.stdin.once(`end`,()=>t(`[mcp] stdin EOF (host closed pipe)`)),e.stdin.once(`close`,()=>t(`[mcp] stdin closed`)),e.process.on(`exit`,e=>{t(`[mcp] exit code=${e}`)}),e.process.on(`uncaughtExceptionMonitor`,(e,n)=>{let r=e instanceof Error?e.stack??e.message:String(e);t(`[mcp] uncaughtException origin=${n}: ${r}`)})}function Yc(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}function Xc(e=fetch,t){return t?async(n,r)=>e(n,{...t,...r,headers:r?.headers?{...Yc(t.headers),...Yc(r.headers)}:t.headers}):e}let Zc;Zc=globalThis.crypto?.webcrypto??globalThis.crypto??import(`node:crypto`).then(e=>e.webcrypto);async function Qc(e){return(await Zc).getRandomValues(new Uint8Array(e))}async function $c(e){let t=``;for(;t.length<e;){let n=await Qc(e-t.length);for(let e of n)e<198&&(t+=`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~`[e%66])}return t}async function el(e){return await $c(e)}async function tl(e){let t=await(await Zc).subtle.digest(`SHA-256`,new TextEncoder().encode(e));return btoa(String.fromCharCode(...new Uint8Array(t))).replace(/\//g,`_`).replace(/\+/g,`-`).replace(/=/g,``)}async function nl(e){if(e||=43,e<43||e>128)throw`Expected a length between 43 and 128. Received ${e}.`;let t=await el(e);return{code_verifier:t,code_challenge:await tl(t)}}const X=d().superRefine((e,t)=>{if(!URL.canParse(e))return t.addIssue({code:li.custom,message:`URL must be parseable`,fatal:!0}),we}).refine(e=>{let t=new URL(e);return t.protocol!==`javascript:`&&t.protocol!==`data:`&&t.protocol!==`vbscript:`},{message:`URL cannot use javascript:, data:, or vbscript: scheme`}),rl=p({resource:f().url(),authorization_servers:w(X).optional(),jwks_uri:f().url().optional(),scopes_supported:w(f()).optional(),bearer_methods_supported:w(f()).optional(),resource_signing_alg_values_supported:w(f()).optional(),resource_name:f().optional(),resource_documentation:f().optional(),resource_policy_uri:f().url().optional(),resource_tos_uri:f().url().optional(),tls_client_certificate_bound_access_tokens:t().optional(),authorization_details_types_supported:w(f()).optional(),dpop_signing_alg_values_supported:w(f()).optional(),dpop_bound_access_tokens_required:t().optional()}),il=p({issuer:f(),authorization_endpoint:X,token_endpoint:X,registration_endpoint:X.optional(),scopes_supported:w(f()).optional(),response_types_supported:w(f()),response_modes_supported:w(f()).optional(),grant_types_supported:w(f()).optional(),token_endpoint_auth_methods_supported:w(f()).optional(),token_endpoint_auth_signing_alg_values_supported:w(f()).optional(),service_documentation:X.optional(),revocation_endpoint:X.optional(),revocation_endpoint_auth_methods_supported:w(f()).optional(),revocation_endpoint_auth_signing_alg_values_supported:w(f()).optional(),introspection_endpoint:f().optional(),introspection_endpoint_auth_methods_supported:w(f()).optional(),introspection_endpoint_auth_signing_alg_values_supported:w(f()).optional(),code_challenge_methods_supported:w(f()).optional(),client_id_metadata_document_supported:t().optional()}),al=p({issuer:f(),authorization_endpoint:X,token_endpoint:X,userinfo_endpoint:X.optional(),jwks_uri:X,registration_endpoint:X.optional(),scopes_supported:w(f()).optional(),response_types_supported:w(f()),response_modes_supported:w(f()).optional(),grant_types_supported:w(f()).optional(),acr_values_supported:w(f()).optional(),subject_types_supported:w(f()),id_token_signing_alg_values_supported:w(f()),id_token_encryption_alg_values_supported:w(f()).optional(),id_token_encryption_enc_values_supported:w(f()).optional(),userinfo_signing_alg_values_supported:w(f()).optional(),userinfo_encryption_alg_values_supported:w(f()).optional(),userinfo_encryption_enc_values_supported:w(f()).optional(),request_object_signing_alg_values_supported:w(f()).optional(),request_object_encryption_alg_values_supported:w(f()).optional(),request_object_encryption_enc_values_supported:w(f()).optional(),token_endpoint_auth_methods_supported:w(f()).optional(),token_endpoint_auth_signing_alg_values_supported:w(f()).optional(),display_values_supported:w(f()).optional(),claim_types_supported:w(f()).optional(),claims_supported:w(f()).optional(),service_documentation:f().optional(),claims_locales_supported:w(f()).optional(),ui_locales_supported:w(f()).optional(),claims_parameter_supported:t().optional(),request_parameter_supported:t().optional(),request_uri_parameter_supported:t().optional(),require_request_uri_registration:t().optional(),op_policy_uri:X.optional(),op_tos_uri:X.optional(),client_id_metadata_document_supported:t().optional()}),ol=b({...al.shape,...il.pick({code_challenge_methods_supported:!0}).shape}),sl=b({access_token:f(),id_token:f().optional(),token_type:f(),expires_in:di().optional(),scope:f().optional(),refresh_token:f().optional()}).strip(),cl=b({error:f(),error_description:f().optional(),error_uri:f().optional()}),ll=X.optional().or(l(``).transform(()=>void 0)),ul=b({redirect_uris:w(X),token_endpoint_auth_method:f().optional(),grant_types:w(f()).optional(),response_types:w(f()).optional(),client_name:f().optional(),client_uri:X.optional(),logo_uri:ll,scope:f().optional(),contacts:w(f()).optional(),tos_uri:ll,policy_uri:f().optional(),jwks_uri:X.optional(),jwks:_().optional(),software_id:f().optional(),software_version:f().optional(),software_statement:f().optional()}).strip(),dl=b({client_id:f(),client_secret:f().optional(),client_id_issued_at:m().optional(),client_secret_expires_at:m().optional()}).strip(),fl=ul.merge(dl);b({error:f(),error_description:f().optional()}).strip(),b({token:f(),token_type_hint:f().optional()}).strip();function pl(e){let t=typeof e==`string`?new URL(e):new URL(e.href);return t.hash=``,t}function ml({requestedResource:e,configuredResource:t}){let n=typeof e==`string`?new URL(e):new URL(e.href),r=typeof t==`string`?new URL(t):new URL(t.href);if(n.origin!==r.origin||n.pathname.length<r.pathname.length)return!1;let i=n.pathname.endsWith(`/`)?n.pathname:n.pathname+`/`,a=r.pathname.endsWith(`/`)?r.pathname:r.pathname+`/`;return i.startsWith(a)}var Z=class extends Error{constructor(e,t){super(e),this.errorUri=t,this.name=this.constructor.name}toResponseObject(){let e={error:this.errorCode,error_description:this.message};return this.errorUri&&(e.error_uri=this.errorUri),e}get errorCode(){return this.constructor.errorCode}},hl=class extends Z{};hl.errorCode=`invalid_request`;var gl=class extends Z{};gl.errorCode=`invalid_client`;var _l=class extends Z{};_l.errorCode=`invalid_grant`;var vl=class extends Z{};vl.errorCode=`unauthorized_client`;var yl=class extends Z{};yl.errorCode=`unsupported_grant_type`;var bl=class extends Z{};bl.errorCode=`invalid_scope`;var xl=class extends Z{};xl.errorCode=`access_denied`;var Sl=class extends Z{};Sl.errorCode=`server_error`;var Cl=class extends Z{};Cl.errorCode=`temporarily_unavailable`;var wl=class extends Z{};wl.errorCode=`unsupported_response_type`;var Tl=class extends Z{};Tl.errorCode=`unsupported_token_type`;var El=class extends Z{};El.errorCode=`invalid_token`;var Dl=class extends Z{};Dl.errorCode=`method_not_allowed`;var Ol=class extends Z{};Ol.errorCode=`too_many_requests`;var kl=class extends Z{};kl.errorCode=`invalid_client_metadata`;var Al=class extends Z{};Al.errorCode=`insufficient_scope`;var jl=class extends Z{};jl.errorCode=`invalid_target`;const Ml={[hl.errorCode]:hl,[gl.errorCode]:gl,[_l.errorCode]:_l,[vl.errorCode]:vl,[yl.errorCode]:yl,[bl.errorCode]:bl,[xl.errorCode]:xl,[Sl.errorCode]:Sl,[Cl.errorCode]:Cl,[wl.errorCode]:wl,[Tl.errorCode]:Tl,[El.errorCode]:El,[Dl.errorCode]:Dl,[Ol.errorCode]:Ol,[kl.errorCode]:kl,[Al.errorCode]:Al,[jl.errorCode]:jl};var Nl=class extends Error{constructor(e){super(e??`Unauthorized`)}};function Pl(e){return[`client_secret_basic`,`client_secret_post`,`none`].includes(e)}const Fl=`code`,Il=`S256`;function Ll(e,t){let n=e.client_secret!==void 0;return`token_endpoint_auth_method`in e&&e.token_endpoint_auth_method&&Pl(e.token_endpoint_auth_method)&&(t.length===0||t.includes(e.token_endpoint_auth_method))?e.token_endpoint_auth_method:t.length===0?n?`client_secret_basic`:`none`:n&&t.includes(`client_secret_basic`)?`client_secret_basic`:n&&t.includes(`client_secret_post`)?`client_secret_post`:t.includes(`none`)?`none`:n?`client_secret_post`:`none`}function Rl(e,t,n,r){let{client_id:i,client_secret:a}=t;switch(e){case`client_secret_basic`:zl(i,a,n);return;case`client_secret_post`:Bl(i,a,r);return;case`none`:Vl(i,r);return;default:throw Error(`Unsupported client authentication method: ${e}`)}}function zl(e,t,n){if(!t)throw Error(`client_secret_basic authentication requires a client_secret`);let r=btoa(`${e}:${t}`);n.set(`Authorization`,`Basic ${r}`)}function Bl(e,t,n){n.set(`client_id`,e),t&&n.set(`client_secret`,t)}function Vl(e,t){t.set(`client_id`,e)}async function Hl(e){let t=e instanceof Response?e.status:void 0,n=e instanceof Response?await e.text():e;try{let{error:e,error_description:t,error_uri:r}=cl.parse(JSON.parse(n));return new(Ml[e]||Sl)(t||``,r)}catch(e){return new Sl(`${t?`HTTP ${t}: `:``}Invalid OAuth error response: ${e}. Raw body: ${n}`)}}async function Ul(e,t){try{return await Wl(e,t)}catch(n){if(n instanceof gl||n instanceof vl)return await e.invalidateCredentials?.(`all`),await Wl(e,t);if(n instanceof _l)return await e.invalidateCredentials?.(`tokens`),await Wl(e,t);throw n}}async function Wl(e,{serverUrl:t,authorizationCode:n,scope:r,resourceMetadataUrl:i,fetchFn:a}){let o=await e.discoveryState?.(),s,c,l,u=i;if(!u&&o?.resourceMetadataUrl&&(u=new URL(o.resourceMetadataUrl)),o?.authorizationServerUrl){if(c=o.authorizationServerUrl,s=o.resourceMetadata,l=o.authorizationServerMetadata??await nu(c,{fetchFn:a}),!s)try{s=await Yl(t,{resourceMetadataUrl:u},a)}catch{}(l!==o.authorizationServerMetadata||s!==o.resourceMetadata)&&await e.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:u?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}else{let n=await ru(t,{resourceMetadataUrl:u,fetchFn:a});c=n.authorizationServerUrl,l=n.authorizationServerMetadata,s=n.resourceMetadata,await e.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:u?.toString(),resourceMetadata:s,authorizationServerMetadata:l})}let d=await Kl(t,e,s),f=r||s?.scopes_supported?.join(` `)||e.clientMetadata.scope,p=await Promise.resolve(e.clientInformation());if(!p){if(n!==void 0)throw Error(`Existing OAuth client information is required when exchanging an authorization code`);let t=l?.client_id_metadata_document_supported===!0,r=e.clientMetadataUrl;if(r&&!Gl(r))throw new kl(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${r}`);if(t&&r)p={client_id:r},await e.saveClientInformation?.(p);else{if(!e.saveClientInformation)throw Error(`OAuth client information must be saveable for dynamic registration`);let t=await lu(c,{metadata:l,clientMetadata:e.clientMetadata,scope:f,fetchFn:a});await e.saveClientInformation(t),p=t}}let m=!e.redirectUrl;if(n!==void 0||m){let t=await cu(e,c,{metadata:l,resource:d,authorizationCode:n,fetchFn:a});return await e.saveTokens(t),`AUTHORIZED`}let h=await e.tokens();if(h?.refresh_token)try{let t=await su(c,{metadata:l,clientInformation:p,refreshToken:h.refresh_token,resource:d,addClientAuthentication:e.addClientAuthentication,fetchFn:a});return await e.saveTokens(t),`AUTHORIZED`}catch(e){if(!(!(e instanceof Z)||e instanceof Sl))throw e}let g=e.state?await e.state():void 0,{authorizationUrl:_,codeVerifier:v}=await iu(c,{metadata:l,clientInformation:p,state:g,redirectUrl:e.redirectUrl,scope:f,resource:d});return await e.saveCodeVerifier(v),await e.redirectToAuthorization(_),`REDIRECT`}function Gl(e){if(!e)return!1;try{let t=new URL(e);return t.protocol===`https:`&&t.pathname!==`/`}catch{return!1}}async function Kl(e,t,n){let r=pl(e);if(t.validateResourceURL)return await t.validateResourceURL(r,n?.resource);if(n){if(!ml({requestedResource:r,configuredResource:n.resource}))throw Error(`Protected resource ${n.resource} does not match expected ${r} (or origin)`);return new URL(n.resource)}}function ql(e){let t=e.headers.get(`WWW-Authenticate`);if(!t)return{};let[n,r]=t.split(` `);if(n.toLowerCase()!==`bearer`||!r)return{};let i=Jl(e,`resource_metadata`)||void 0,a;if(i)try{a=new URL(i)}catch{}let o=Jl(e,`scope`)||void 0,s=Jl(e,`error`)||void 0;return{resourceMetadataUrl:a,scope:o,error:s}}function Jl(e,t){let n=e.headers.get(`WWW-Authenticate`);if(!n)return null;let r=RegExp(`${t}=(?:"([^"]+)"|([^\\s,]+))`),i=n.match(r);return i?i[1]||i[2]:null}async function Yl(e,t,n=fetch){let r=await eu(e,`oauth-protected-resource`,n,{protocolVersion:t?.protocolVersion,metadataUrl:t?.resourceMetadataUrl});if(!r||r.status===404)throw await r?.body?.cancel(),Error(`Resource server does not implement OAuth 2.0 Protected Resource Metadata.`);if(!r.ok)throw await r.body?.cancel(),Error(`HTTP ${r.status} trying to load well-known OAuth protected resource metadata.`);return rl.parse(await r.json())}async function Xl(e,t,n=fetch){try{return await n(e,{headers:t})}catch(r){if(r instanceof TypeError)return t?Xl(e,void 0,n):void 0;throw r}}function Zl(e,t=``,n={}){return t.endsWith(`/`)&&(t=t.slice(0,-1)),n.prependPathname?`${t}/.well-known/${e}`:`/.well-known/${e}${t}`}async function Ql(e,t,n=fetch){return await Xl(e,{"MCP-Protocol-Version":t},n)}function $l(e,t){return!e||e.status>=400&&e.status<500&&t!==`/`}async function eu(e,t,n,r){let i=new URL(e),a=r?.protocolVersion??`2025-11-25`,o;if(r?.metadataUrl)o=new URL(r.metadataUrl);else{let e=Zl(t,i.pathname);o=new URL(e,r?.metadataServerUrl??i),o.search=i.search}let s=await Ql(o,a,n);return!r?.metadataUrl&&$l(s,i.pathname)&&(s=await Ql(new URL(`/.well-known/${t}`,i),a,n)),s}function tu(e){let t=typeof e==`string`?new URL(e):e,n=t.pathname!==`/`,r=[];if(!n)return r.push({url:new URL(`/.well-known/oauth-authorization-server`,t.origin),type:`oauth`}),r.push({url:new URL(`/.well-known/openid-configuration`,t.origin),type:`oidc`}),r;let i=t.pathname;return i.endsWith(`/`)&&(i=i.slice(0,-1)),r.push({url:new URL(`/.well-known/oauth-authorization-server${i}`,t.origin),type:`oauth`}),r.push({url:new URL(`/.well-known/openid-configuration${i}`,t.origin),type:`oidc`}),r.push({url:new URL(`${i}/.well-known/openid-configuration`,t.origin),type:`oidc`}),r}async function nu(e,{fetchFn:t=fetch,protocolVersion:n=zt}={}){let r={"MCP-Protocol-Version":n,Accept:`application/json`},i=tu(e);for(let{url:e,type:n}of i){let i=await Xl(e,r,t);if(i){if(!i.ok){if(await i.body?.cancel(),i.status>=400&&i.status<500)continue;throw Error(`HTTP ${i.status} trying to load ${n===`oauth`?`OAuth`:`OpenID provider`} metadata from ${e}`)}return n===`oauth`?il.parse(await i.json()):ol.parse(await i.json())}}}async function ru(e,t){let n,r;try{n=await Yl(e,{resourceMetadataUrl:t?.resourceMetadataUrl},t?.fetchFn),n.authorization_servers&&n.authorization_servers.length>0&&(r=n.authorization_servers[0])}catch{}r||=String(new URL(`/`,e));let i=await nu(r,{fetchFn:t?.fetchFn});return{authorizationServerUrl:r,authorizationServerMetadata:i,resourceMetadata:n}}async function iu(e,{metadata:t,clientInformation:n,redirectUrl:r,scope:i,state:a,resource:o}){let s;if(t){if(s=new URL(t.authorization_endpoint),!t.response_types_supported.includes(Fl))throw Error(`Incompatible auth server: does not support response type ${Fl}`);if(t.code_challenge_methods_supported&&!t.code_challenge_methods_supported.includes(Il))throw Error(`Incompatible auth server: does not support code challenge method ${Il}`)}else s=new URL(`/authorize`,e);let c=await nl(),l=c.code_verifier,u=c.code_challenge;return s.searchParams.set(`response_type`,Fl),s.searchParams.set(`client_id`,n.client_id),s.searchParams.set(`code_challenge`,u),s.searchParams.set(`code_challenge_method`,Il),s.searchParams.set(`redirect_uri`,String(r)),a&&s.searchParams.set(`state`,a),i&&s.searchParams.set(`scope`,i),i?.includes(`offline_access`)&&s.searchParams.append(`prompt`,`consent`),o&&s.searchParams.set(`resource`,o.href),{authorizationUrl:s,codeVerifier:l}}function au(e,t,n){return new URLSearchParams({grant_type:`authorization_code`,code:e,code_verifier:t,redirect_uri:String(n)})}async function ou(e,{metadata:t,tokenRequestParams:n,clientInformation:r,addClientAuthentication:i,resource:a,fetchFn:o}){let s=t?.token_endpoint?new URL(t.token_endpoint):new URL(`/token`,e),c=new Headers({"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`});a&&n.set(`resource`,a.href),i?await i(c,n,s,t):r&&Rl(Ll(r,t?.token_endpoint_auth_methods_supported??[]),r,c,n);let l=await(o??fetch)(s,{method:`POST`,headers:c,body:n});if(!l.ok)throw await Hl(l);return sl.parse(await l.json())}async function su(e,{metadata:t,clientInformation:n,refreshToken:r,resource:i,addClientAuthentication:a,fetchFn:o}){return{refresh_token:r,...await ou(e,{metadata:t,tokenRequestParams:new URLSearchParams({grant_type:`refresh_token`,refresh_token:r}),clientInformation:n,addClientAuthentication:a,resource:i,fetchFn:o})}}async function cu(e,t,{metadata:n,resource:r,authorizationCode:i,fetchFn:a}={}){let o=e.clientMetadata.scope,s;if(e.prepareTokenRequest&&(s=await e.prepareTokenRequest(o)),!s){if(!i)throw Error(`Either provider.prepareTokenRequest() or authorizationCode is required`);if(!e.redirectUrl)throw Error(`redirectUrl is required for authorization_code flow`);s=au(i,await e.codeVerifier(),e.redirectUrl)}let c=await e.clientInformation();return ou(t,{metadata:n,tokenRequestParams:s,clientInformation:c??void 0,addClientAuthentication:e.addClientAuthentication,resource:r,fetchFn:a})}async function lu(e,{metadata:t,clientMetadata:n,scope:r,fetchFn:i}){let a;if(t){if(!t.registration_endpoint)throw Error(`Incompatible auth server: does not support dynamic client registration`);a=new URL(t.registration_endpoint)}else a=new URL(`/register`,e);let o=await(i??fetch)(a,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...n,...r===void 0?{}:{scope:r}})});if(!o.ok)throw await Hl(o);return fl.parse(await o.json())}var uu=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function du(e){}function fu(e){if(typeof e==`function`)throw TypeError("`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?");let{onEvent:t=du,onError:n=du,onRetry:r=du,onComment:i,maxBufferSize:a}=e,o=[],s=0,c=!0,l,u=``,d=0,f,p=!1;function m(e){if(p)throw Error("Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing.");if(c&&(c=!1,e.charCodeAt(0)===239&&e.charCodeAt(1)===187&&e.charCodeAt(2)===191&&(e=e.slice(3))),o.length===0){let t=g(e);t!==``&&(o.push(t),s=t.length),h();return}if(e.indexOf(`
|
|
57
57
|
`)===-1&&e.indexOf(`\r`)===-1){o.push(e),s+=e.length,h();return}o.push(e);let t=o.join(``);o.length=0,s=0;let n=g(t);n!==``&&(o.push(n),s=n.length),h()}function h(){a!==void 0&&(s+u.length<=a||(p=!0,o.length=0,s=0,l=void 0,u=``,d=0,f=void 0,n(new uu(`Buffered data exceeded max buffer size of ${a} characters`,{type:`max-buffer-size-exceeded`}))))}function g(e){let n=0;if(e.indexOf(`\r`)===-1){let r=e.indexOf(`
|
|
58
58
|
`,n);for(;r!==-1;){if(n===r){d>0&&t({id:l,event:f,data:u}),l=void 0,u=``,d=0,f=void 0,n=r+1,r=e.indexOf(`
|
|
59
59
|
`,n);continue}let i=e.charCodeAt(n);if(pu(e,n,i)){let i=e.charCodeAt(n+5)===32?n+6:n+5,a=e.slice(i,r);if(d===0&&e.charCodeAt(r+1)===10){t({id:l,event:f,data:a}),l=void 0,u=``,f=void 0,n=r+2,r=e.indexOf(`
|
|
@@ -62,47 +62,47 @@ ${a}`,d++}else mu(e,n,i)?f=e.slice(e.charCodeAt(n+6)===32?n+7:n+6,r)||void 0:_(e
|
|
|
62
62
|
`,n)}return e.slice(n)}for(;n<e.length;){let t=e.indexOf(`\r`,n),r=e.indexOf(`
|
|
63
63
|
`,n),i=-1;if(t!==-1&&r!==-1?i=t<r?t:r:t===-1?r!==-1&&(i=r):i=t===e.length-1?-1:t,i===-1)break;_(e,n,i),n=i+1,e.charCodeAt(n-1)===13&&e.charCodeAt(n)===10&&n++}return e.slice(n)}function _(e,t,n){if(t===n){y();return}let r=e.charCodeAt(t);if(pu(e,t,r)){let r=e.charCodeAt(t+5)===32?t+6:t+5,i=e.slice(r,n);u=d===0?i:`${u}
|
|
64
64
|
${i}`,d++;return}if(mu(e,t,r)){f=e.slice(e.charCodeAt(t+6)===32?t+7:t+6,n)||void 0;return}if(r===105&&e.charCodeAt(t+1)===100&&e.charCodeAt(t+2)===58){let r=e.slice(e.charCodeAt(t+3)===32?t+4:t+3,n);l=r.includes(`\0`)?void 0:r;return}if(r===58){if(i){let r=e.slice(t,n);i(r.slice(e.charCodeAt(t+1)===32?2:1))}return}let a=e.slice(t,n),o=a.indexOf(`:`);if(o===-1){v(a,``,a);return}let s=a.slice(0,o),c=a.charCodeAt(o+1)===32?2:1;v(s,a.slice(o+c),a)}function v(e,t,i){switch(e){case`event`:f=t||void 0;break;case`data`:u=d===0?t:`${u}
|
|
65
|
-
${t}`,d++;break;case`id`:l=t.includes(`\0`)?void 0:t;break;case`retry`:/^\d+$/.test(t)?r(parseInt(t,10)):n(new uu(`Invalid \`retry\` value: "${t}"`,{type:`invalid-retry`,value:t,line:i}));break;default:n(new uu(`Unknown field "${e.length>20?`${e.slice(0,20)}\u2026`:e}"`,{type:`unknown-field`,field:e,value:t,line:i}))}}function y(){d>0&&t({id:l,event:f,data:u}),l=void 0,u=``,d=0,f=void 0}function b(e={}){if(e.consume&&o.length>0){let e=o.join(``);_(e,0,e.length)}c=!0,l=void 0,u=``,d=0,f=void 0,o.length=0,s=0,p=!1}return{feed:m,reset:b}}function pu(e,t,n){return n===100&&e.charCodeAt(t+1)===97&&e.charCodeAt(t+2)===116&&e.charCodeAt(t+3)===97&&e.charCodeAt(t+4)===58}function mu(e,t,n){return n===101&&e.charCodeAt(t+1)===118&&e.charCodeAt(t+2)===101&&e.charCodeAt(t+3)===110&&e.charCodeAt(t+4)===116&&e.charCodeAt(t+5)===58}var hu=class extends TransformStream{constructor({onError:e,onRetry:t,onComment:n,maxBufferSize:r}={}){let i;super({start(a){i=fu({onEvent:e=>{a.enqueue(e)},onError(t){typeof e==`function`&&e(t),(e===`terminate`||t.type===`max-buffer-size-exceeded`)&&a.error(t)},onRetry:t,onComment:n,maxBufferSize:r})},transform(e){i.feed(e)}})}};const gu={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2};var _u=class extends Error{constructor(e,t){super(`Streamable HTTP error: ${t}`),this.code=e}},vu=class{constructor(e,t){this._hasCompletedAuthFlow=!1,this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=t?.requestInit,this._authProvider=t?.authProvider,this._fetch=t?.fetch,this._fetchWithInit=Xc(t?.fetch,t?.requestInit),this._sessionId=t?.sessionId,this._reconnectionOptions=t?.reconnectionOptions??gu}async _authThenStart(){if(!this._authProvider)throw new Nl(`No auth provider`);let e;try{e=await Ul(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(e){throw this.onerror?.(e),e}if(e!==`AUTHORIZED`)throw new Nl;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let e={};if(this._authProvider){let t=await this._authProvider.tokens();t&&(e.Authorization=`Bearer ${t.access_token}`)}this._sessionId&&(e[`mcp-session-id`]=this._sessionId),this._protocolVersion&&(e[`mcp-protocol-version`]=this._protocolVersion);let t=Yc(this._requestInit?.headers);return new Headers({...e,...t})}async _startOrAuthSse(e){let{resumptionToken:t}=e;try{let n=await this._commonHeaders();n.set(`Accept`,`text/event-stream`),t&&n.set(`last-event-id`,t);let r=await(this._fetch??fetch)(this._url,{method:`GET`,headers:n,signal:this._abortController?.signal});if(!r.ok){if(await r.body?.cancel(),r.status===401&&this._authProvider)return await this._authThenStart();if(r.status===405)return;throw new _u(r.status,`Failed to open SSE stream: ${r.statusText}`)}this._handleSseStream(r.body,e,!0)}catch(e){throw this.onerror?.(e),e}}_getNextReconnectionDelay(e){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let t=this._reconnectionOptions.initialReconnectionDelay,n=this._reconnectionOptions.reconnectionDelayGrowFactor,r=this._reconnectionOptions.maxReconnectionDelay;return Math.min(t*n**+e,r)}_scheduleReconnection(e,t=0){let n=this._reconnectionOptions.maxRetries;if(t>=n){this.onerror?.(Error(`Maximum reconnection attempts (${n}) exceeded.`));return}let r=this._getNextReconnectionDelay(t);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(e).catch(n=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${n instanceof Error?n.message:String(n)}`)),this._scheduleReconnection(e,t+1)})},r)}_handleSseStream(e,t,n){if(!e)return;let{onresumptiontoken:r,replayMessageId:i}=t,a,o=!1,s=!1;(async()=>{try{let t=e.pipeThrough(new TextDecoderStream).pipeThrough(new hu({onRetry:e=>{this._serverRetryMs=e}})).getReader();for(;;){let{value:e,done:n}=await t.read();if(n)break;if(e.id&&(a=e.id,o=!0,r?.(e.id)),e.data&&(!e.event||e.event===`message`))try{let t=bt.parse(JSON.parse(e.data));Dt(t)&&(s=!0,i!==void 0&&(t.id=i)),this.onmessage?.(t)}catch(e){this.onerror?.(e)}}(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted&&this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){if(this.onerror?.(Error(`SSE stream disconnected: ${e}`)),(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){this.onerror?.(Error(`Failed to reconnect: ${e instanceof Error?e.message:String(e)}`))}}})()}async start(){if(this._abortController)throw Error(`StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.`);this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new Nl(`No auth provider`);if(await Ul(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new Nl(`Failed to authorize`)}async close(){this._reconnectionTimeout&&=(clearTimeout(this._reconnectionTimeout),void 0),this._abortController?.abort(),this.onclose?.()}async send(e,t){try{let{resumptionToken:n,onresumptiontoken:r}=t||{};if(n){this._startOrAuthSse({resumptionToken:n,replayMessageId:Ct(e)?e.id:void 0}).catch(e=>this.onerror?.(e));return}let i=await this._commonHeaders();i.set(`content-type`,`application/json`),i.set(`accept`,`application/json, text/event-stream`);let a={...this._requestInit,method:`POST`,headers:i,body:JSON.stringify(e),signal:this._abortController?.signal},o=await(this._fetch??fetch)(this._url,a),s=o.headers.get(`mcp-session-id`);if(s&&(this._sessionId=s),!o.ok){let t=await o.text().catch(()=>null);if(o.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new _u(401,`Server returned 401 after successful authentication`);let{resourceMetadataUrl:t,scope:n}=ql(o);if(this._resourceMetadataUrl=t,this._scope=n,await Ul(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new Nl;return this._hasCompletedAuthFlow=!0,this.send(e)}if(o.status===403&&this._authProvider){let{resourceMetadataUrl:t,scope:n,error:r}=ql(o);if(r===`insufficient_scope`){let r=o.headers.get(`WWW-Authenticate`);if(this._lastUpscopingHeader===r)throw new _u(403,`Server returned 403 after trying upscoping`);if(n&&(this._scope=n),t&&(this._resourceMetadataUrl=t),this._lastUpscopingHeader=r??void 0,await Ul(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!==`AUTHORIZED`)throw new Nl;return this.send(e)}}throw new _u(o.status,`Error POSTing to endpoint: ${t}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,o.status===202){await o.body?.cancel(),Qt(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(e=>this.onerror?.(e));return}let c=(Array.isArray(e)?e:[e]).filter(e=>`method`in e&&`id`in e&&e.id!==void 0).length>0,l=o.headers.get(`content-type`);if(c){if(l?.includes(`text/event-stream`))this._handleSseStream(o.body,{onresumptiontoken:r},!1);else if(l?.includes(`application/json`)){let e=await o.json(),t=Array.isArray(e)?e.map(e=>bt.parse(e)):[bt.parse(e)];for(let e of t)this.onmessage?.(e)}else throw await o.body?.cancel(),new _u(-1,`Unexpected content type: ${l}`)}else await o.body?.cancel()}catch(e){throw this.onerror?.(e),e}}get sessionId(){return this._sessionId}async terminateSession(){if(this._sessionId)try{let e=await this._commonHeaders(),t={...this._requestInit,method:`DELETE`,headers:e,signal:this._abortController?.signal},n=await(this._fetch??fetch)(this._url,t);if(await n.body?.cancel(),!n.ok&&n.status!==405)throw new _u(n.status,`Failed to terminate session: ${n.statusText}`);this._sessionId=void 0}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}async resumeStream(e,t){await this._startOrAuthSse({resumptionToken:e,onresumptiontoken:t?.onresumptiontoken})}};function yu(e){return Rr.join(Rr.dirname(e),`..`,`Frameworks`,`OpenKnowledge Server.app`,`Contents`,`MacOS`,`OpenKnowledge Helper`)}const bu=/\/[^/]+\.app\/Contents\/MacOS\/[^/]+$/;function xu(e){if(e.platform!==`darwin`||!bu.test(e.execPath))return null;let t=yu(e.execPath);return e.exists(t)?t:null}function Su(e={}){let t=e.execPath??process.execPath,n=e.platform??process.platform,r=e.argv??process.argv,i=e.exists??z,a=r[1];return a?{command:xu({execPath:t,platform:n,exists:i})??t,prefixArgs:[a]}:(console.warn(`[self-spawn] process.argv[1] is empty — falling back to \`npx -y @inkeep/open-knowledge@latest\`. This re-introduces the registry-fetch surface that re-exec was fixing. Observed argv: ${JSON.stringify(r)}`),{command:`npx`,prefixArgs:[`-y`,`@inkeep/open-knowledge@latest`]})}function Cu(e){return(t,n)=>{if((n?.method??`GET`).toUpperCase()===`GET`)return globalThis.fetch(t,n);let r=new AbortController,i=setTimeout(()=>r.abort(Error(`MCP request timed out after ${e}ms`)),e),a=n?.signal instanceof AbortSignal?AbortSignal.any([n.signal,r.signal]):r.signal;return globalThis.fetch(t,{...n,signal:a}).finally(()=>clearTimeout(i))}}function wu(e){if(e===void 0||e===``)return;let t=Number.parseInt(e,10);if(!(Number.isNaN(t)||t<=0))return t}function Tu(e){return e===`0.0.0.0`||e===`::`?`localhost`:e.includes(`:`)&&!e.startsWith(`[`)?`[${e}]`:e}function Eu(e,t){return`http://${Tu(e)}:${t}/mcp`}function Du(e){return`${e}/mcp`}function Ou(e){return e.replace(/^http/,`ws`)}function ku(e){let t=new URL(e);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.pathname=``,t.search=``,t.hash=``,t.toString().replace(/\/$/,``)}function Au(e,t){if(e&&e.draining!==!0&&t(e.pid))return Xe(e,{fallbackHost:`127.0.0.1`})??void 0}function ju(e){if(!z(e))return``;let t=te(V(e,`utf-8`)).trim();return t.length>8192?`…${t.slice(-8192)}`:t}function Mu(e,t){return`server did not start within ${e}ms${t?` stderr:\n${t}`:``}`}function Nu(e){if(e&&typeof e==`object`&&`method`in e&&`id`in e)return e.id}function Pu(e){if(!e||typeof e!=`object`||!(`result`in e))return;let t=e.result;if(!t||typeof t!=`object`||!(`protocolVersion`in t))return;let n=t.protocolVersion;return typeof n==`string`?n:void 0}function Fu(e,t){return{jsonrpc:`2.0`,id:e,error:{code:-32e3,message:t instanceof Error?t.message:String(t)}}}async function Iu(e){let t=e.readLock??(()=>an(e.lockDir)),n=e.isAlive??un,r=e.sleep??(e=>oi(e)),i=e.spawn??Pr,a=e.readErrorLog??ju,o=e.openErrorLog??(e=>$e(e,process.pid)),s=e.closeFd??Gr,c=e.timeoutMs??5e3,l=e.pollIntervalMs??100;if(e.portOverride!==void 0){let t=Number.parseInt(e.portOverride,10);if(Number.isNaN(t)||t<=0)throw Error(`invalid --port value '${e.portOverride}' — HTTP MCP shim requires a positive port`);return Eu(ye,t)}let u=t(),d=Au(u,n);if(d!==void 0)return Du(d);if(e.envAutoStart===`0`)throw new xt(`OpenKnowledge server is not running and OK_MCP_AUTOSTART=0 disables auto-start.`);if(u!==null&&u.draining===!0&&n(u.pid)){let e=Date.now(),i=e+c,a=!0;for(;Date.now()<i;){let e=t();if(e===null||e.draining!==!0||!n(e.pid)){a=!1;break}await r(l)}console.error(`[mcp-shim] waited ${Date.now()-e}ms for a draining predecessor server${a?` (timed out — proceeding anyway)`:``}`);let o=Au(t(),n);if(o!==void 0)return Du(o)}z(e.lockDir)||B(e.lockDir,{recursive:!0});let f=I(e.lockDir,Te),p=o(f),m,h,g=Su();try{try{m=i(g.command,[...g.prefixArgs,`start`],{detached:!0,stdio:[`ignore`,`ignore`,p],windowsHide:!0,cwd:e.contentDir,env:{...process.env,OK_LOCK_KIND:`mcp-spawned`,ELECTRON_RUN_AS_NODE:`1`}}),m.on(`error`,e=>{h=e instanceof Error?e.message:String(e)}),m.unref()}catch(e){h=e instanceof Error?e.message:String(e)}}finally{try{s(p)}catch{}}let _=Date.now()+c;for(;Date.now()<_;){if(h){let e=a(f),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${h}${t}`)}await r(l);let e=Au(t(),n);if(e!==void 0)return Du(e)}if(h){let e=a(f),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${h}${t}`)}throw Error(Mu(c,a(f)))}function Lu(e,t){if(e.portOverride!==void 0)return ku(t);let n=e.readLock??(()=>an(e.lockDir)),r=e.isAlive??un,i=Au(n(),r);if(i!==void 0)return Ou(i)}async function Ru(e,t={}){let n=t.stderr??process.stderr,r=t.requestTimeoutMs??12e4,a=t.createStdioTransport?t.createStdioTransport(t.stdin,t.stdout):new Uc(t.stdin,t.stdout),o=t.createHttpTransport?t.createHttpTransport(new URL(e)):new vu(new URL(e),{fetch:Cu(r),requestInit:{headers:{...i({kind:`mcp`,runtimeVersion:Gt}),...t.connectionId===void 0?{}:{[qt]:t.connectionId}}}}),s=!1,c=async()=>{s||(s=!0,t.onclose?.(),await Promise.allSettled([a.close(),o.close()]))};a.onerror=e=>{n.write(`[mcp-shim] stdio error: ${e.message}\n`)},o.onerror=e=>{n.write(`[mcp-shim] HTTP transport error: ${e.message}\n`)},a.onclose=()=>{c()},o.onclose=()=>{c()};let l=Promise.resolve();a.onmessage=e=>{l=l.then(async()=>{try{await o.send(e)}catch(t){let r=Nu(e);if(r===void 0){n.write(`[mcp-shim] failed to forward stdio notification: ${t instanceof Error?t.message:String(t)}\n`);return}await a.send(Fu(r,t)).catch(e=>{n.write(`[mcp-shim] failed to write stdio error response: ${e instanceof Error?e.message:String(e)}\n`)})}}).catch(e=>{n.write(`[mcp-shim] unexpected stdio forwarding failure: ${e instanceof Error?e.message:String(e)}\n`)})},o.onmessage=e=>{let t=Pu(e);t&&o.setProtocolVersion?.(t),a.send(e).catch(e=>{n.write(`[mcp-shim] failed to write stdio response: ${e instanceof Error?e.message:String(e)}\n`)})};try{await o.start(),await a.start()}catch(e){throw await c(),e}return{close:c}}async function zu(e){let t=e.stderr??process.stderr,n=e.bridgeFn??Ru,r=await Iu(e),i=e.createConnectionId?.()??ii(),a=!1,o=(e.startKeepalive??zc)({connectionId:i,pid:process.pid,resolveWsUrl:async()=>Lu(e,r),log:e=>t.write(`[mcp-shim] keepalive: ${e}\n`)});t.write(`[mcp-shim] proxying stdio to ${r}\n`);let s;try{s=await n(r,{stderr:t,connectionId:i,onclose:()=>{a||(o.close(),process.exit(0))}})}catch(e){throw o.close(),e}let c=()=>{a=!0,o.close(),s.close().finally(()=>{process.exit(0)})};process.once(`SIGINT`,c),process.once(`SIGTERM`,c)}const Bu=/^mcp\.\d{4}-\d{2}-\d{2}\.log$/;function Vu(){return I(W(),`.ok`,`logs`)}function Hu(e,t=()=>new Date){try{let n=t().getTime(),r=Yr(e).filter(e=>Bu.test(e)).flatMap(t=>{try{let n=H(I(e,t));return[{name:t,mtime:n.mtimeMs,size:n.size}]}catch{return[]}}),i=[];for(let t of r)if(n-t.mtime>6048e5)try{U(I(e,t.name))}catch{}else i.push(t);i.sort((e,t)=>e.mtime-t.mtime);let a=i.reduce((e,t)=>e+t.size,0);for(let t of i){if(a<=47185920)break;try{U(I(e,t.name)),a-=t.size}catch{}}}catch{}}function Uu(e={}){let t=e.logsDir??Vu(),n=e.now??(()=>new Date),r=e.pruneDelayMs??5e3;r<=0?Hu(t,n):setTimeout(()=>Hu(t,n),r).unref?.();let i=0,a=!1;return{write(e){if(!(i>=5))try{a||=(B(t,{recursive:!0}),!0);let r=n().toISOString(),o=I(t,`mcp.${r.slice(0,10)}.log`);Wr(o,`${r} ${e}`),i=0}catch{a=!1,i++}}}}const Wu=Hr(import.meta.url),Gu=ai(jr);async function Ku(e){try{let{stdout:t}=await Gu(`git`,[`-C`,e,`worktree`,`list`,`--porcelain`],E({timeout:2e3}));return t.split(`
|
|
66
|
-
`).filter(e=>e.startsWith(`worktree `)).length}catch{return 0}}function qu(e){let t=
|
|
65
|
+
${t}`,d++;break;case`id`:l=t.includes(`\0`)?void 0:t;break;case`retry`:/^\d+$/.test(t)?r(parseInt(t,10)):n(new uu(`Invalid \`retry\` value: "${t}"`,{type:`invalid-retry`,value:t,line:i}));break;default:n(new uu(`Unknown field "${e.length>20?`${e.slice(0,20)}\u2026`:e}"`,{type:`unknown-field`,field:e,value:t,line:i}))}}function y(){d>0&&t({id:l,event:f,data:u}),l=void 0,u=``,d=0,f=void 0}function b(e={}){if(e.consume&&o.length>0){let e=o.join(``);_(e,0,e.length)}c=!0,l=void 0,u=``,d=0,f=void 0,o.length=0,s=0,p=!1}return{feed:m,reset:b}}function pu(e,t,n){return n===100&&e.charCodeAt(t+1)===97&&e.charCodeAt(t+2)===116&&e.charCodeAt(t+3)===97&&e.charCodeAt(t+4)===58}function mu(e,t,n){return n===101&&e.charCodeAt(t+1)===118&&e.charCodeAt(t+2)===101&&e.charCodeAt(t+3)===110&&e.charCodeAt(t+4)===116&&e.charCodeAt(t+5)===58}var hu=class extends TransformStream{constructor({onError:e,onRetry:t,onComment:n,maxBufferSize:r}={}){let i;super({start(a){i=fu({onEvent:e=>{a.enqueue(e)},onError(t){typeof e==`function`&&e(t),(e===`terminate`||t.type===`max-buffer-size-exceeded`)&&a.error(t)},onRetry:t,onComment:n,maxBufferSize:r})},transform(e){i.feed(e)}})}};const gu={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2};var _u=class extends Error{constructor(e,t){super(`Streamable HTTP error: ${t}`),this.code=e}},vu=class{constructor(e,t){this._hasCompletedAuthFlow=!1,this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=t?.requestInit,this._authProvider=t?.authProvider,this._fetch=t?.fetch,this._fetchWithInit=Xc(t?.fetch,t?.requestInit),this._sessionId=t?.sessionId,this._reconnectionOptions=t?.reconnectionOptions??gu}async _authThenStart(){if(!this._authProvider)throw new Nl(`No auth provider`);let e;try{e=await Ul(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(e){throw this.onerror?.(e),e}if(e!==`AUTHORIZED`)throw new Nl;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let e={};if(this._authProvider){let t=await this._authProvider.tokens();t&&(e.Authorization=`Bearer ${t.access_token}`)}this._sessionId&&(e[`mcp-session-id`]=this._sessionId),this._protocolVersion&&(e[`mcp-protocol-version`]=this._protocolVersion);let t=Yc(this._requestInit?.headers);return new Headers({...e,...t})}async _startOrAuthSse(e){let{resumptionToken:t}=e;try{let n=await this._commonHeaders();n.set(`Accept`,`text/event-stream`),t&&n.set(`last-event-id`,t);let r=await(this._fetch??fetch)(this._url,{method:`GET`,headers:n,signal:this._abortController?.signal});if(!r.ok){if(await r.body?.cancel(),r.status===401&&this._authProvider)return await this._authThenStart();if(r.status===405)return;throw new _u(r.status,`Failed to open SSE stream: ${r.statusText}`)}this._handleSseStream(r.body,e,!0)}catch(e){throw this.onerror?.(e),e}}_getNextReconnectionDelay(e){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let t=this._reconnectionOptions.initialReconnectionDelay,n=this._reconnectionOptions.reconnectionDelayGrowFactor,r=this._reconnectionOptions.maxReconnectionDelay;return Math.min(t*n**+e,r)}_scheduleReconnection(e,t=0){let n=this._reconnectionOptions.maxRetries;if(t>=n){this.onerror?.(Error(`Maximum reconnection attempts (${n}) exceeded.`));return}let r=this._getNextReconnectionDelay(t);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(e).catch(n=>{this.onerror?.(Error(`Failed to reconnect SSE stream: ${n instanceof Error?n.message:String(n)}`)),this._scheduleReconnection(e,t+1)})},r)}_handleSseStream(e,t,n){if(!e)return;let{onresumptiontoken:r,replayMessageId:i}=t,a,o=!1,s=!1;(async()=>{try{let t=e.pipeThrough(new TextDecoderStream).pipeThrough(new hu({onRetry:e=>{this._serverRetryMs=e}})).getReader();for(;;){let{value:e,done:n}=await t.read();if(n)break;if(e.id&&(a=e.id,o=!0,r?.(e.id)),e.data&&(!e.event||e.event===`message`))try{let t=xt.parse(JSON.parse(e.data));Ot(t)&&(s=!0,i!==void 0&&(t.id=i)),this.onmessage?.(t)}catch(e){this.onerror?.(e)}}(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted&&this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){if(this.onerror?.(Error(`SSE stream disconnected: ${e}`)),(n||o)&&!s&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:a,onresumptiontoken:r,replayMessageId:i},0)}catch(e){this.onerror?.(Error(`Failed to reconnect: ${e instanceof Error?e.message:String(e)}`))}}})()}async start(){if(this._abortController)throw Error(`StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.`);this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new Nl(`No auth provider`);if(await Ul(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new Nl(`Failed to authorize`)}async close(){this._reconnectionTimeout&&=(clearTimeout(this._reconnectionTimeout),void 0),this._abortController?.abort(),this.onclose?.()}async send(e,t){try{let{resumptionToken:n,onresumptiontoken:r}=t||{};if(n){this._startOrAuthSse({resumptionToken:n,replayMessageId:wt(e)?e.id:void 0}).catch(e=>this.onerror?.(e));return}let i=await this._commonHeaders();i.set(`content-type`,`application/json`),i.set(`accept`,`application/json, text/event-stream`);let a={...this._requestInit,method:`POST`,headers:i,body:JSON.stringify(e),signal:this._abortController?.signal},o=await(this._fetch??fetch)(this._url,a),s=o.headers.get(`mcp-session-id`);if(s&&(this._sessionId=s),!o.ok){let t=await o.text().catch(()=>null);if(o.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new _u(401,`Server returned 401 after successful authentication`);let{resourceMetadataUrl:t,scope:n}=ql(o);if(this._resourceMetadataUrl=t,this._scope=n,await Ul(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!==`AUTHORIZED`)throw new Nl;return this._hasCompletedAuthFlow=!0,this.send(e)}if(o.status===403&&this._authProvider){let{resourceMetadataUrl:t,scope:n,error:r}=ql(o);if(r===`insufficient_scope`){let r=o.headers.get(`WWW-Authenticate`);if(this._lastUpscopingHeader===r)throw new _u(403,`Server returned 403 after trying upscoping`);if(n&&(this._scope=n),t&&(this._resourceMetadataUrl=t),this._lastUpscopingHeader=r??void 0,await Ul(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!==`AUTHORIZED`)throw new Nl;return this.send(e)}}throw new _u(o.status,`Error POSTing to endpoint: ${t}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,o.status===202){await o.body?.cancel(),$t(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(e=>this.onerror?.(e));return}let c=(Array.isArray(e)?e:[e]).filter(e=>`method`in e&&`id`in e&&e.id!==void 0).length>0,l=o.headers.get(`content-type`);if(c){if(l?.includes(`text/event-stream`))this._handleSseStream(o.body,{onresumptiontoken:r},!1);else if(l?.includes(`application/json`)){let e=await o.json(),t=Array.isArray(e)?e.map(e=>xt.parse(e)):[xt.parse(e)];for(let e of t)this.onmessage?.(e)}else throw await o.body?.cancel(),new _u(-1,`Unexpected content type: ${l}`)}else await o.body?.cancel()}catch(e){throw this.onerror?.(e),e}}get sessionId(){return this._sessionId}async terminateSession(){if(this._sessionId)try{let e=await this._commonHeaders(),t={...this._requestInit,method:`DELETE`,headers:e,signal:this._abortController?.signal},n=await(this._fetch??fetch)(this._url,t);if(await n.body?.cancel(),!n.ok&&n.status!==405)throw new _u(n.status,`Failed to terminate session: ${n.statusText}`);this._sessionId=void 0}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}async resumeStream(e,t){await this._startOrAuthSse({resumptionToken:e,onresumptiontoken:t?.onresumptiontoken})}};function yu(e){return zr.join(zr.dirname(e),`..`,`Frameworks`,`OpenKnowledge Server.app`,`Contents`,`MacOS`,`OpenKnowledge Helper`)}const bu=/\/[^/]+\.app\/Contents\/MacOS\/[^/]+$/;function xu(e){if(e.platform!==`darwin`||!bu.test(e.execPath))return null;let t=yu(e.execPath);return e.exists(t)?t:null}function Su(e={}){let t=e.execPath??process.execPath,n=e.platform??process.platform,r=e.argv??process.argv,i=e.exists??R,a=r[1];return a?{command:xu({execPath:t,platform:n,exists:i})??t,prefixArgs:[a]}:(console.warn(`[self-spawn] process.argv[1] is empty — falling back to \`npx -y @inkeep/open-knowledge@latest\`. This re-introduces the registry-fetch surface that re-exec was fixing. Observed argv: ${JSON.stringify(r)}`),{command:`npx`,prefixArgs:[`-y`,`@inkeep/open-knowledge@latest`]})}function Cu(e){return(t,n)=>{if((n?.method??`GET`).toUpperCase()===`GET`)return globalThis.fetch(t,n);let r=new AbortController,i=setTimeout(()=>r.abort(Error(`MCP request timed out after ${e}ms`)),e),a=n?.signal instanceof AbortSignal?AbortSignal.any([n.signal,r.signal]):r.signal;return globalThis.fetch(t,{...n,signal:a}).finally(()=>clearTimeout(i))}}function wu(e){if(e===void 0||e===``)return;let t=Number.parseInt(e,10);if(!(Number.isNaN(t)||t<=0))return t}function Tu(e){return e===`0.0.0.0`||e===`::`?`localhost`:e.includes(`:`)&&!e.startsWith(`[`)?`[${e}]`:e}function Eu(e,t){return`http://${Tu(e)}:${t}/mcp`}function Du(e){return`${e}/mcp`}function Ou(e){return e.replace(/^http/,`ws`)}function ku(e){let t=new URL(e);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.pathname=``,t.search=``,t.hash=``,t.toString().replace(/\/$/,``)}function Au(e,t){if(e&&e.draining!==!0&&t(e.pid))return Ze(e,{fallbackHost:`127.0.0.1`})??void 0}function ju(e){if(!R(e))return``;let t=ue(B(e,`utf-8`)).trim();return t.length>8192?`…${t.slice(-8192)}`:t}function Mu(e,t){return`server did not start within ${e}ms${t?` stderr:\n${t}`:``}`}function Nu(e){if(e&&typeof e==`object`&&`method`in e&&`id`in e)return e.id}function Pu(e){if(!e||typeof e!=`object`||!(`result`in e))return;let t=e.result;if(!t||typeof t!=`object`||!(`protocolVersion`in t))return;let n=t.protocolVersion;return typeof n==`string`?n:void 0}function Fu(e,t){return{jsonrpc:`2.0`,id:e,error:{code:-32e3,message:t instanceof Error?t.message:String(t)}}}async function Iu(e){let t=e.readLock??(()=>on(e.lockDir)),n=e.isAlive??dn,r=e.sleep??(e=>si(e)),i=e.spawn??Fr,a=e.readErrorLog??ju,o=e.openErrorLog??(e=>et(e,process.pid)),c=e.closeFd??Kr,l=e.timeoutMs??5e3,u=e.pollIntervalMs??100;if(e.portOverride!==void 0){let t=Number.parseInt(e.portOverride,10);if(Number.isNaN(t)||t<=0)throw Error(`invalid --port value '${e.portOverride}' — HTTP MCP shim requires a positive port`);return Eu(Se,t)}let d=t(),f=Au(d,n);if(f!==void 0)return Du(f);if(e.envAutoStart===`0`)throw new St(`OpenKnowledge server is not running and OK_MCP_AUTOSTART=0 disables auto-start.`);if(d!==null&&d.draining===!0&&n(d.pid)){let e=Date.now(),i=e+l,a=!0;for(;Date.now()<i;){let e=t();if(e===null||e.draining!==!0||!n(e.pid)){a=!1;break}await r(u)}console.error(`[mcp-shim] waited ${Date.now()-e}ms for a draining predecessor server${a?` (timed out — proceeding anyway)`:``}`);let o=Au(t(),n);if(o!==void 0)return Du(o)}R(e.lockDir)||z(e.lockDir,{recursive:!0});let p=F(e.lockDir,s),m=o(p),h,g,_=Su();try{try{h=i(_.command,[..._.prefixArgs,`start`],{detached:!0,stdio:[`ignore`,`ignore`,m],windowsHide:!0,cwd:e.contentDir,env:{...process.env,OK_LOCK_KIND:`mcp-spawned`,ELECTRON_RUN_AS_NODE:`1`}}),h.on(`error`,e=>{g=e instanceof Error?e.message:String(e)}),h.unref()}catch(e){g=e instanceof Error?e.message:String(e)}}finally{try{c(m)}catch{}}let v=Date.now()+l;for(;Date.now()<v;){if(g){let e=a(p),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${g}${t}`)}await r(u);let e=Au(t(),n);if(e!==void 0)return Du(e)}if(g){let e=a(p),t=e?` stderr:\n${e}`:``;throw Error(`spawn failed: ${g}${t}`)}throw Error(Mu(l,a(p)))}function Lu(e,t){if(e.portOverride!==void 0)return ku(t);let n=e.readLock??(()=>on(e.lockDir)),r=e.isAlive??dn,i=Au(n(),r);if(i!==void 0)return Ou(i)}async function Ru(e,t={}){let n=t.stderr??process.stderr,r=t.requestTimeoutMs??12e4,i=t.createStdioTransport?t.createStdioTransport(t.stdin,t.stdout):new Uc(t.stdin,t.stdout),a=t.createHttpTransport?t.createHttpTransport(new URL(e)):new vu(new URL(e),{fetch:Cu(r),requestInit:{headers:{...c({kind:`mcp`,runtimeVersion:Kt}),...t.connectionId===void 0?{}:{[Jt]:t.connectionId}}}}),o=!1,s=async()=>{o||(o=!0,t.onclose?.(),await Promise.allSettled([i.close(),a.close()]))};i.onerror=e=>{n.write(`[mcp-shim] stdio error: ${e.message}\n`)},a.onerror=e=>{n.write(`[mcp-shim] HTTP transport error: ${e.message}\n`)},i.onclose=()=>{s()},a.onclose=()=>{s()};let l=Promise.resolve();i.onmessage=e=>{l=l.then(async()=>{try{await a.send(e)}catch(t){let r=Nu(e);if(r===void 0){n.write(`[mcp-shim] failed to forward stdio notification: ${t instanceof Error?t.message:String(t)}\n`);return}await i.send(Fu(r,t)).catch(e=>{n.write(`[mcp-shim] failed to write stdio error response: ${e instanceof Error?e.message:String(e)}\n`)})}}).catch(e=>{n.write(`[mcp-shim] unexpected stdio forwarding failure: ${e instanceof Error?e.message:String(e)}\n`)})},a.onmessage=e=>{let t=Pu(e);t&&a.setProtocolVersion?.(t),i.send(e).catch(e=>{n.write(`[mcp-shim] failed to write stdio response: ${e instanceof Error?e.message:String(e)}\n`)})};try{await a.start(),await i.start()}catch(e){throw await s(),e}return{close:s}}async function zu(e){let t=e.stderr??process.stderr,n=e.bridgeFn??Ru,r=await Iu(e),i=e.createConnectionId?.()??ai(),a=!1,o=(e.startKeepalive??zc)({connectionId:i,pid:process.pid,resolveWsUrl:async()=>Lu(e,r),log:e=>t.write(`[mcp-shim] keepalive: ${e}\n`)});t.write(`[mcp-shim] proxying stdio to ${r}\n`);let s;try{s=await n(r,{stderr:t,connectionId:i,onclose:()=>{a||(o.close(),process.exit(0))}})}catch(e){throw o.close(),e}let c=()=>{a=!0,o.close(),s.close().finally(()=>{process.exit(0)})};process.once(`SIGINT`,c),process.once(`SIGTERM`,c)}const Bu=/^mcp\.\d{4}-\d{2}-\d{2}\.log$/;function Vu(){return F(U(),`.ok`,`logs`)}function Hu(e,t=()=>new Date){try{let n=t().getTime(),r=Xr(e).filter(e=>Bu.test(e)).flatMap(t=>{try{let n=V(F(e,t));return[{name:t,mtime:n.mtimeMs,size:n.size}]}catch{return[]}}),i=[];for(let t of r)if(n-t.mtime>6048e5)try{H(F(e,t.name))}catch{}else i.push(t);i.sort((e,t)=>e.mtime-t.mtime);let a=i.reduce((e,t)=>e+t.size,0);for(let t of i){if(a<=47185920)break;try{H(F(e,t.name)),a-=t.size}catch{}}}catch{}}function Uu(e={}){let t=e.logsDir??Vu(),n=e.now??(()=>new Date),r=e.pruneDelayMs??5e3;r<=0?Hu(t,n):setTimeout(()=>Hu(t,n),r).unref?.();let i=0,a=!1;return{write(e){if(!(i>=5))try{a||=(z(t,{recursive:!0}),!0);let r=n().toISOString(),o=F(t,`mcp.${r.slice(0,10)}.log`);Gr(o,`${r} ${e}`),i=0}catch{a=!1,i++}}}}const Wu=Ur(import.meta.url),Gu=oi(Mr);async function Ku(e){try{let{stdout:t}=await Gu(`git`,[`-C`,e,`worktree`,`list`,`--porcelain`],T({timeout:2e3}));return t.split(`
|
|
66
|
+
`).filter(e=>e.startsWith(`worktree `)).length}catch{return 0}}function qu(e){let t=L(e);for(;;){if(Ne(t))return t;let n=P(t);if(n===t)throw Error(`No OpenKnowledge project found at or above ${e}. Pass an explicit \`cwd\` argument that points inside an OK project (a directory with a \`${at}\`).`);t=n}}function Ju(e){try{let t=new URL(e);return t.protocol===`file:`?Ur(t):void 0}catch{return}}async function Yu(e){if(!e.getClientCapabilities()?.roots)return;let t;try{t=await e.listRoots()}catch(t){e.log?.(`listRoots fallback failed: ${t instanceof Error?t.message:String(t)}`);return}let n=t.roots??[];if(n.length!==1)return;let r=Ju(n[0].uri);return r===void 0&&e.log?.(`single root URI not usable as fs path: ${n[0].uri}`),r}async function Xu(e,t,n,r=qu){if(e!==void 0){let t=r(e);return{projectDir:t,viaRootGuess:!1,nextSticky:t}}if(t!==void 0){let e=r(t);return{projectDir:e,viaRootGuess:!1,nextSticky:e}}let i=await n();return i===void 0?{projectDir:void 0,viaRootGuess:!1,nextSticky:void 0}:{projectDir:r(i),viaRootGuess:!0,nextSticky:void 0}}async function Zu(e){let t=Uu(),n={write:e=>(t.write(e),process.stderr.write(e))},r=e.spawnTimeoutMs??wu(process.env.OK_MCP_SPAWN_TIMEOUT_MS),i=e.envAutoStart??process.env.OK_MCP_AUTOSTART,a=kr({startupCwd:e.startupCwd,startupConfig:e.startupConfig}),o=new Yt({name:oe,version:Kt});Le(o);let s=ai(),c={current:{connectionId:s,displayName:s,colorSeed:s}},l=new Map,u=e=>{if(l.has(e))return;let t=_t(e),r=c.current,i=zc({connectionId:s,pid:process.pid,displayName:r.displayName,clientName:r.clientInfo?.name??r.displayName,colorSeed:r.colorSeed,resolveWsUrl:async()=>Lu({lockDir:t,contentDir:e},``),log:t=>n.write(`[mcp] keepalive[${e}]: ${t}\n`)});l.set(e,i)},d=()=>Yu({getClientCapabilities:()=>o.server.getClientCapabilities(),listRoots:()=>o.server.listRoots(),log:e=>n.write(`[mcp] ${e}\n`)}),f,p=!1,m=async e=>{if(p)return;p=!0;let t=await Ku(e);if(t<=1){p=!1;return}let r=`Routed to ${e} from the MCP client's single advertised root, but this repo has ${t} git worktrees. If you are working in a worktree, pass its path as \`cwd\` on OK tool calls once — it sticks for the session, so reads, writes, and the preview all target that worktree instead of this checkout.`;try{n.write(`[mcp] ${r}\n`),await o.server.sendLoggingMessage({level:`warning`,data:r})}catch{}},h=async e=>{let t=await Xu(e,f,d);if(f=t.nextSticky??f,t.projectDir===void 0)throw Error("`cwd` is required for tool calls against the global MCP server. Pass an absolute path inside an OpenKnowledge project, or have the MCP client advertise a single root.");return t.viaRootGuess&&m(t.projectDir),t.projectDir},g=async e=>{let t=await Xu(e,f,d);if(f=t.nextSticky??f,t.projectDir===void 0)return;t.viaRootGuess&&m(t.projectDir);let n=t.projectDir,o=await a(n),s=await Iu({lockDir:_t(n),contentDir:st(o,n),envAutoStart:i,...r===void 0?{}:{timeoutMs:r}});return u(n),s.replace(/\/mcp$/,``)};o.server.oninitialized=()=>{let e=o.server.getClientVersion(),t=kt(e?.name,s);c.current={connectionId:s,clientInfo:e?{name:t,version:e.version}:void 0,displayName:t,colorSeed:t}},Ye(o,{serverUrl:g,resolveCwd:h,config:a,identityRef:c,isHostedAgent:ee(process.env)}),tt(o);let _=new Uc,v=!1,y,b,x=async()=>{if(v)return;v=!0,y?.stop(),b?.stop();for(let e of l.values())try{e.close()}catch(e){n.write(`[mcp] keepalive close error: ${e instanceof Error?e.message:String(e)}\n`)}l.clear();let e=await Promise.allSettled([o.close(),_.close()]);for(let t of e)if(t.status===`rejected`){let e=t.reason;n.write(`[mcp] shutdown close error: ${e instanceof Error?e.message:String(e)}\n`)}};await o.connect(_),n.write(`[mcp] global stdio server ready (per-call project routing)
|
|
67
67
|
`);let S=!1,C=()=>{S||(S=!0,setTimeout(()=>{n.write(`[mcp] shutdown deadline (5s) reached — forcing exit(1)
|
|
68
68
|
`),process.exit(1)},5e3).unref(),x().finally(()=>{process.exit(0)}))};if(process.once(`SIGINT`,C),process.once(`SIGTERM`,C),process.stdin.on(`end`,()=>{n.write(`[mcp] stdin end — host disconnected, shutting down
|
|
69
|
-
`),C()}),process.stdin.on(`error`,e=>{n.write(`[mcp] stdin error (${e instanceof Error?e.message:String(e)}) — host disconnected, shutting down\n`),C()}),b=qc({getPpid:()=>process.ppid,onHostGone:e=>{n.write(`[mcp] ${e} — shutting down\n`),C()}}),Jc({log:e=>n.write(`${e}\n`),transport:_,process,stdin:process.stdin}),process.platform===`darwin`){let e=Kc(Wu,{realpathSync:
|
|
69
|
+
`),C()}),process.stdin.on(`error`,e=>{n.write(`[mcp] stdin error (${e instanceof Error?e.message:String(e)}) — host disconnected, shutting down\n`),C()}),b=qc({getPpid:()=>process.ppid,onHostGone:e=>{n.write(`[mcp] ${e} — shutting down\n`),C()}}),Jc({log:e=>n.write(`${e}\n`),transport:_,process,stdin:process.stdin}),process.platform===`darwin`){let e=Kc(Wu,{realpathSync:Qr,statInoSync:e=>V(e).ino,log:e=>n.write(`${e}\n`)});if(e!==void 0){n.write(`[mcp] bundle identity anchor=${e.resolvedPath} inode=${e.inode} version=${Kt}\n`);let{resolvedPath:t,inode:r}=e;y=Gc({detect:()=>Wc({bundleAnchorPath:Wu,currentInode:r,platform:process.platform,realpath:Qr,statInode:e=>V(e).ino}),onReplaced:e=>{n.write(`[mcp] bundle replaced anchor=${t} bootInode=${e.currentInode} onDiskInode=${e.onDiskInode} version=${Kt} — exiting for host respawn\n`),C()},log:e=>n.write(`[mcp] ${e}\n`)})}}return{close:x}}function Qu(e){return new D(`mcp`).description(`Start MCP stdio server for project knowledge base`).option(`-p, --port <port>`,`Override per-call routing and proxy stdio to this HTTP MCP port (skips bundle proxy)`,void 0).option(`--no-bundle-proxy`,`Run the npm-fetched MCP server in-process instead of proxying to the Desktop app bundle (macOS-only proxy; no-op elsewhere; equivalent: OK_BUNDLE_PROXY=0)`).action(async t=>{try{let n=e(),r=process.cwd();if(t.port!==void 0){let e=wu(process.env.OK_MCP_SPAWN_TIMEOUT_MS);await zu({lockDir:``,contentDir:``,portOverride:t.port,envAutoStart:process.env.OK_MCP_AUTOSTART,timeoutMs:e});return}let i=t.bundleProxy===!1?[...process.argv,`--no-bundle-proxy`]:process.argv,a=Ic(process.env,i,process.platform);if(a.proxy){let e=Fc(process.platform,U(),{existsSync:R});if(e===null)Lc({stderr:process.stderr,mode:`fallback-absent`,bundlePath:null,reason:`no installed OpenKnowledge.app bundle found`});else try{await Rc({bundlePath:e,argv:process.argv.slice(2),env:process.env,stderr:process.stderr});return}catch(t){Lc({stderr:process.stderr,mode:`fallback-exec-failed`,bundlePath:e,reason:t instanceof Error?t.message:String(t)})}}else{let e=a.suppressedBy===`env`?`suppressed-env`:a.suppressedBy===`flag`?`suppressed-flag`:a.suppressedBy===`self`?`suppressed-self`:`suppressed-platform`;Lc({stderr:process.stderr,mode:e,bundlePath:null,reason:null})}await Zu({startupCwd:r,startupConfig:n})}catch(e){process.stderr.write(`MCP server failed to start: ${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}})}const $u=/<aside>\s*([\s\S]*?)\s*<\/aside>/g,ed=/^(?:\p{Extended_Pictographic}️?\s*)+/u;function td(e){return e.replace($u,(e,t)=>{let n=t.replace(/\r\n/g,`
|
|
70
70
|
`).split(`
|
|
71
71
|
`);for(;n.length>0&&n[0].trim()===``;)n.shift();for(;n.length>0&&n[n.length-1].trim()===``;)n.pop();if(n.length>0)for(n[0]=n[0].replace(ed,``);n.length>0&&n[0].trim()===``;)n.shift();let r=n.map(e=>e.trim()===``?`>`:`> ${e}`).join(`
|
|
72
72
|
`);return r?`> [!note]\n${r}`:`> [!note]`})}const nd=/(!?)\[([^\]]*)\]\(data:image\/([a-z0-9.+-]+);base64,([A-Za-z0-9+/=\s]+?)\)/gi,rd={png:`png`,jpeg:`jpg`,jpg:`jpg`,gif:`gif`,webp:`webp`,"svg+xml":`svg`};function id(e){return e.replace(/\.(md|mdx)$/i,``).replace(/[^A-Za-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).toLowerCase()||`inline`}function ad(e,t,n={}){let r=[],i=id(t),a=0;return{markdown:e.replace(nd,(e,t,o,s,c)=>{if(n.strip)return``;a+=1;let l=rd[s.toLowerCase()]??s.toLowerCase().replace(/[^a-z0-9]/g,``),u=`${i}-inline-${a}.${l}`,d=new Uint8Array(Buffer.from(c.replace(/\s+/g,``),`base64`));return r.push({filename:u,bytes:d}),``}),assets:r}}function od(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=[],r=``,i=[],a=!1,o=!1,s=()=>{i.push(r),r=``},c=()=>{s(),n.push(i),i=[],o=!1};for(let e=0;e<t.length;e++){let n=t[e];if(a){n===`"`?t[e+1]===`"`?(r+=`"`,e++):a=!1:r+=n,o=!0;continue}n===`"`?(a=!0,o=!0):n===`,`?(s(),o=!0):n===`
|
|
73
73
|
`?c():n===`\r`?(t[e+1]===`
|
|
74
|
-
`&&e++,c()):(r+=n,o=!0)}return(o||r!==``)&&c(),{header:n.length>0?n[0]:[],rows:n.slice(1)}}const sd=/[*"/\\<>:|?()]/g,cd=/\.(md|mdx)$/i,ld=/\s+[0-9a-f]{32}$/i;function ud(e){let t=e.split(/[\\/]/).pop()??e;try{t=decodeURIComponent(t)}catch{}return t=t.replace(cd,``),t=t.replace(ld,``),t=t.replace(sd,``),t=t.replace(/\s+/g,` `).trim().toLowerCase(),t}function dd(e){let t=new Map;for(let n of e){let e=ud(n);if(!e)continue;let r=t.get(e);r?r.push(n):t.set(e,[n])}return t}function fd(e,t){let n=ud(t),r=n?e.get(n):void 0;return!r||r.length===0?{path:null,ambiguous:!1}:r.length>1?{path:null,ambiguous:!0}:{path:r[0],ambiguous:!1}}const pd=/\s+[0-9a-f]{32}$/i,md=/\.mdx?$/i;function hd(e,t={}){let n=new Set(e),r=[];for(let i of e){if(!i.endsWith(`_all.csv`))continue;let a=i.slice(0,-8),o=n.has(`${a}.md`)?`${a}.md`:n.has(`${a}.mdx`)?`${a}.mdx`:null,s=a.replace(pd,``),c=``;try{c=
|
|
74
|
+
`&&e++,c()):(r+=n,o=!0)}return(o||r!==``)&&c(),{header:n.length>0?n[0]:[],rows:n.slice(1)}}const sd=/[*"/\\<>:|?()]/g,cd=/\.(md|mdx)$/i,ld=/\s+[0-9a-f]{32}$/i;function ud(e){let t=e.split(/[\\/]/).pop()??e;try{t=decodeURIComponent(t)}catch{}return t=t.replace(cd,``),t=t.replace(ld,``),t=t.replace(sd,``),t=t.replace(/\s+/g,` `).trim().toLowerCase(),t}function dd(e){let t=new Map;for(let n of e){let e=ud(n);if(!e)continue;let r=t.get(e);r?r.push(n):t.set(e,[n])}return t}function fd(e,t){let n=ud(t),r=n?e.get(n):void 0;return!r||r.length===0?{path:null,ambiguous:!1}:r.length>1?{path:null,ambiguous:!0}:{path:r[0],ambiguous:!1}}const pd=/\s+[0-9a-f]{32}$/i,md=/\.mdx?$/i;function hd(e,t={}){let n=new Set(e),r=[];for(let i of e){if(!i.endsWith(`_all.csv`))continue;let a=i.slice(0,-8),o=n.has(`${a}.md`)?`${a}.md`:n.has(`${a}.mdx`)?`${a}.mdx`:null,s=a.replace(pd,``),c=``;try{c=B(i,`utf8`)}catch{t.onUnreadable?.(i)}let l=od(c).header,u=new Set(l.map(e=>e.trim()).filter(e=>e.length>0)),d=e.filter(e=>e!==o&&md.test(e)&&e.startsWith(`${s}${Br}`));r.push({csvPath:i,stubPath:o,stubTargetPath:`${a}.md`,folderPath:s,propertyKeys:u,csvText:c,rowFiles:d,folderIndex:dd(d),fallbackTitle:Lr(s)})}return r}const gd=/^[a-z][a-z0-9+.-]*:/i,_d=/^\s*(`{3,}|~{3,})/,vd=/_all\.csv(?=$|[#?])/i;function yd(e){let t=Math.min(...[e.indexOf(`#`),e.indexOf(`?`)].filter(e=>e>=0).concat(e.length)),n=e.slice(0,t),r=e.slice(t);try{return decodeURIComponent(n)+r}catch{return e}}function bd(e,t){if(e.startsWith(`<`)&&e.endsWith(`>`)){let n=e.slice(1,-1);if(gd.test(n)||n.startsWith(`//`)||n.startsWith(`#`))return e;let r=yd(n);return t&&(r=r.replace(vd,`.md`)),`<${r}>`}if(gd.test(e)||e.startsWith(`//`)||e.startsWith(`#`))return e;let n=yd(e);return t&&(n=n.replace(vd,`.md`)),/\s/.test(n)?`<${n}>`:n}function xd(e,t){let n=``,r=0;for(;r<e.length;){let i=e.indexOf(`](`,r);if(i===-1){n+=e.slice(r);break}n+=e.slice(r,i+2);let a=i+2;if(e[a]===`<`){let i=e.indexOf(`>`,a);if(i===-1||e[i+1]!==`)`){r=a;continue}n+=`${bd(e.slice(a,i+1),t)})`,r=i+2;continue}let o=1,s=a;for(;s<e.length;s++){let t=e[s];if(t===`(`)o++;else if(t===`)`&&(o--,o===0))break}if(s>=e.length){n+=e.slice(a);break}n+=`${bd(e.slice(a,s),t)})`,r=s+1}return n}function Sd(e,t){let n=``,r=0;for(;r<e.length;){if(e[r]==="`"){let t=0;for(;e[r+t]==="`";)t++;let i=e.slice(r,r+t),a=e.indexOf(i,r+t);if(a>=0){n+=e.slice(r,a+t),r=a+t;continue}n+=e.slice(r);break}let i=e.indexOf("`",r),a=i===-1?e.length:i;n+=xd(e.slice(r,a),t),r=a}return n}function Cd(e,t={}){let n=t.redirectCsv??!1,r=e.split(`
|
|
75
75
|
`),i=null;for(let e=0;e<r.length;e++){let t=r[e],a=t.match(_d);if(a){let e=a[1][0];i===null?i=e:e===i&&(i=null);continue}i===null&&(r[e]=Sd(t,n))}return r.join(`
|
|
76
|
-
`)}function wd(e){let t=[],n=[e];for(;n.length>0;){let e=n.pop(),r;try{r=
|
|
76
|
+
`)}function wd(e){let t=[],n=[e];for(;n.length>0;){let e=n.pop(),r;try{r=Xr(e)}catch{continue}for(let i of r){if(i.startsWith(`.`))continue;let r=F(e,i),a=!1,o=!1;try{let e=Jr(r);e.isSymbolicLink()?o=V(r).isFile():(a=e.isDirectory(),o=e.isFile())}catch{continue}a?n.push(r):o&&t.push(r)}}return t}const Td=/ [0-9a-f]{32}\.mdx?$/i,Ed=/data:image\/[a-z0-9.+-]+;base64,/i;function Dd(e){let t=wd(e);for(let e of t)if(e.endsWith(`_all.csv`)||Td.test(e))return!0;for(let e of t)if(/\.mdx?$/i.test(e))try{if(Ed.test(B(e,`utf8`)))return!0}catch{}return!1}const Od=/^[A-Za-z0-9][A-Za-z0-9 ._/-]*$/,kd=/^(true|false|null|~)$/i,Ad=/^[-+]?(\.\d+|\d+(\.\d*)?([eE][-+]?\d+)?|0x[0-9a-fA-F]+|0o[0-7]+|\.inf|\.nan)$/i;function jd(e){return`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function Md(e){return e===``?`""`:kd.test(e)||Ad.test(e)?jd(e):Od.test(e)?e:jd(e)}function Nd(e,t){let n=Od.test(e)?e:jd(e);return t.trimEnd()===``?`${n}:`:`${n}: ${Md(t.trimEnd())}`}function Pd(e,t){if(t.size===0||/^---\r?\n/.test(e))return e;let n=e.split(`
|
|
77
77
|
`),r=-1;for(let t=0;t<n.length;t++){if(/^#\s+/.test(n[t])){r=t;break}if(n[t].trim()!==``)return e}if(r===-1)return e;let i=r+1;for(;i<n.length&&n[i].trim()===``;)i++;let a=[];for(;i<n.length;){let e=n[i].match(/^([^:]+):\s?(.*)$/);if(!e)break;let r=e[1].trim();if(!t.has(r))break;a.push([r,e[2]]),i++}if(a.length===0)return e;let o=n.slice(i);for(;o.length>0&&o[0].trim()===``;)o.shift();let s=[`---`,...a.map(([e,t])=>Nd(e,t)),`---`,``,n[r]];o.length>0&&s.push(``,...o);let c=s.join(`
|
|
78
78
|
`).replace(/\n+$/,``);return e.endsWith(`
|
|
79
79
|
`)?`${c}\n`:c}function Fd(e){return e.replace(/\r\n|\r|\n/g,`<br>`).replace(/\|/g,`\\|`)}function Id(e){return/\s/.test(e)?`<${e}>`:e}function Ld(e,t={}){let{header:n,rows:r}=od(e),i=n.length;if(i===0)return{table:``,columns:0,wide:!1};let a=t.wideThreshold??15,o=t.titleColumn??0;return{table:[`| ${n.map(Fd).join(` | `)} |`,`| ${n.map(()=>`---`).join(` | `)} |`,...r.map(e=>`| ${n.map((n,r)=>{let i=e[r]??``,a=Fd(i);if(r===o&&t.linkForTitle&&i.trim()!==``){let e=t.linkForTitle(i);if(e)return`[${a}](${Id(e)})`}return a}).join(` | `)} |`)].join(`
|
|
80
|
-
`),columns:i,wide:i>a}}function Rd(e,t){let n=e.match(/^#\s+(.+)$/m);return n?n[1].trim():t}function zd(e,t){return`# ${e}\n\n${t}\n`}const Bd=[`links`,`frontmatter`,`callouts`,`images`,`tables`],Vd=/\.mdx?$/i;function Hd(e){return{isNotionExport:e,transforms:{links:0,frontmatter:0,callouts:0,images:0,tables:0},assetsExtracted:0,stubsCreated:0,csvsRemoved:0,wideTables:[],ambiguousTitleLinks:0,unreadable:[],filesChanged:0}}function Ud(e,t={}){let n=t.selected??new Set(Bd),r=Dd(e);if(!r&&!t.force)return{changes:[],assets:[],deletions:[],report:Hd(!1)};let i=Hd(r),a=wd(e),o=hd(a,{onUnreadable:e=>i.unreadable.push(e)}),s=n.has(`tables`),c=new Map,l=new Set;for(let e of o){e.stubPath&&l.add(e.stubPath);for(let t of e.rowFiles)c.set(t,e)}let u=[],d=[],f=[];for(let e of a){if(!Vd.test(e)||s&&l.has(e))continue;let r;try{r=
|
|
81
|
-
`)}function Jd(e,t){return JSON.stringify({applied:t.applied,...e},null,2)}function Yd(e){let t=new Set(Bd);return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0).map(e=>{if(!t.has(e))throw Error(`Unknown transform "${e}". Valid transforms: ${Bd.join(`, `)}`);return e})}function Xd(e,t){let n=new Set(Bd);if(e&&(n=new Set(Yd(e))),t)for(let e of Yd(t))n.delete(e);return n}function Zd(){let e=new
|
|
82
|
-
`)),lf(e.json,{type:`complete`,op:r}),e.json||process.stderr.write(`✓ ${r} complete\n`)}function df(e){return new O(`sync`).description(`Commit, pull, and push to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await uf({json:t.json,op:`sync`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ sync failed: ${n}\n`),process.exit(1)}})}function ff(e){return new O(`pull`).description(`Pull changes from the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await uf({json:t.json,op:`pull`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ pull failed: ${n}\n`),process.exit(1)}})}function pf(e){return new O(`push`).description(`Push commits to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await uf({json:t.json,op:`push`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ push failed: ${n}\n`),process.exit(1)}})}const mf={existsSync:e=>z(e),isDirectory:e=>{try{return H(e).isDirectory()}catch(e){if(e.code===`ENOENT`)return!1;throw e}},readdirSync:e=>Yr(e),readFileSync:e=>V(e),writeFileSync:(e,t)=>{ei(e,t)},mkdirSync:(e,t)=>{B(e,t)},rmSync:(e,t)=>{$r(e,t)}},hf={resolveProjectBundledSkillDir:()=>rt(`project`,{checkDesktop:!1}),resolveUserBundledSkillDir:e=>rt(e,{checkDesktop:!1}),readBundledVersion:()=>tt(),readRecordedVersion:e=>Ft(e,`cli-hosts`),writeRecordedVersion:(e,t)=>ht(e,`cli-hosts`,t,`cli-start`),recordEvent:e=>We(e),readBundleDecision:(e,t)=>en(e,t),writeBundleDecision:(e,t,n)=>Yt(e,t,n),removeBundleFromDisk:(e,t)=>dr(e,t)};function gf(e){process.stderr.write(`${JSON.stringify(e)}\n`)}function _f(e,t,n){n.rmSync(t,{recursive:!0,force:!0}),n.mkdirSync(F(t),{recursive:!0}),vf(e,t,n)}function vf(e,t,n){n.mkdirSync(t,{recursive:!0});for(let r of n.readdirSync(e)){let i=I(e,r),a=I(t,r);n.isDirectory(i)?vf(i,a,n):n.writeFileSync(a,n.readFileSync(i))}}function yf(e,t,n){return n.existsSync(I(e,`.agents`,`skills`,t))||ne.some(r=>n.existsSync(I(e,r.skillsRoot,t)))}function bf(e,t,n,r,i,a){let o=[],s=I(e,`.agents`,`skills`,t);if(yf(e,t,r)){r.existsSync(s)&&o.push({kind:`central`,path:s,outcome:`skipped-present`});for(let n of ne){let i=I(e,n.skillsRoot,t);if(i!==s){if(!r.existsSync(I(e,n.hostDir))){o.push({kind:`host`,editorId:n.editorId,hostDir:n.hostDir,path:i,outcome:`skipped-host-absent`});continue}r.existsSync(i)&&o.push({kind:`host`,editorId:n.editorId,hostDir:n.hostDir,path:i,outcome:`skipped-present`})}}return{entries:o,anyWritten:!1,anyDestinationSucceeded:!0}}let c=r.existsSync(I(e,`.agents`));if(c&&r.existsSync(s))o.push({kind:`central`,path:s,outcome:`skipped-present`});else if(c)try{_f(n,s,r),o.push({kind:`central`,path:s,outcome:`written`}),i({event:`user-skill-reclaim-central-written`,scope:`user`,path:s,preexisting:!1,version:a})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({kind:`central`,path:s,outcome:`failed`,error:t}),i({event:`user-skill-reclaim-central-failed`,scope:`user`,path:s,error:t})}for(let c of ne){let l=I(e,c.hostDir),u=I(e,c.skillsRoot,t);if(u===s){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-collapsed-with-central`});continue}if(!r.existsSync(l)){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-host-absent`});continue}if(r.existsSync(u)){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-present`});continue}try{_f(n,u,r),o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`written`}),i({event:`user-skill-reclaim-host-written`,scope:`user`,editorId:c.editorId,hostDir:c.hostDir,path:u,preexisting:!1,version:a})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`failed`,error:t}),i({event:`user-skill-reclaim-host-failed`,scope:`user`,editorId:c.editorId,hostDir:c.hostDir,path:u,error:t})}}return{entries:o,anyWritten:o.some(e=>e.outcome===`written`),anyDestinationSucceeded:o.some(e=>e.outcome===`written`||e.outcome===`skipped-present`)}}function xf(e,t){if(!e)return!1;try{return t.existsSync(e)?t.readFileSync(e).toString(`utf8`).includes(`# ok-mcp-`):!1}catch{return!1}}function Sf(e,t,n,r){if(!e||!t)return!1;let i;try{i=e.configPath(n,r)}catch{return!1}let a=e=>I(lt(F(e)),Ir(e));return a(t)===a(i)}function Cf(e,t,n,r,i){let a;try{a=n.resolveProjectBundledSkillDir()}catch(e){return i({event:`project-skill-reclaim-bundle-missing`,scope:`project`,error:e instanceof Error?e.message:String(e)}),{outcome:`skipped`,reason:`bundle-missing`}}let o=[];for(let n of wn){let s=I(e,n.hostDir,`skills`,`open-knowledge`),c=I(s,`SKILL.md`);if(r.existsSync(c)){o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`present`});continue}let l=Tn[n.editorId],u=l?.projectConfigPath?.(e);if(Sf(l,u,e,t)){o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`skipped-global-collision`}),i({event:`project-skill-reclaim-skipped-global-collision`,scope:`project`,editorId:n.editorId,path:s});continue}if(!xf(u,r)){o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`no-token`}),i({event:`project-skill-reclaim-no-token`,scope:`project`,editorId:n.editorId,path:s});continue}try{bn(s,e),_f(a,s,r),o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`created`}),i({event:`project-skill-reclaim-created`,scope:`project`,editorId:n.editorId,path:s})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`failed`,error:t}),i({event:`project-skill-reclaim-failed`,scope:`project`,editorId:n.editorId,path:s,error:t})}}return{outcome:`done`,entries:o}}async function wf(e,t,n,r){let i=e=>{t.recordEvent(e).catch(()=>{})},a=()=>new Date().toISOString(),o;try{o=await t.readBundledVersion()}catch(e){let t=e instanceof Error?e.message:String(e);return r({event:`user-skill-reclaim-version-read-failed`,scope:`user`,error:t}),i({ts:a(),surface:`cli-start`,target:`cli-hosts`,bundle:`discovery`,outcome:`failed`,reason:`version-read-failed:${t}`}),{outcome:`skipped`,reason:`version-read-failed`}}let s;try{s=await t.readRecordedVersion(e)}catch(e){r({event:`user-skill-reclaim-version-read-error`,scope:`user`,error:e instanceof Error?e.message:String(e)}),s=null}let c=[],l=null;for(let e of Re)try{c.push({id:e,sourceDir:t.resolveUserBundledSkillDir(e)})}catch(e){l=e instanceof Error?e.message:String(e)}if(c.length===0)return r({event:`user-skill-reclaim-bundle-missing`,scope:`user`,error:l??`no user-global bundles`}),i({ts:a(),surface:`cli-start`,target:`cli-hosts`,outcome:`failed`,reason:`bundle-missing:${l}`}),{outcome:`skipped`,reason:`bundle-missing`};let u=[];for(let i of c){let a=zt[i.id],o=yf(e,a,n),s=await t.readBundleDecision(e,a).catch(()=>null);if(!x(s,{installedOnDisk:o})){if(o)try{t.removeBundleFromDisk(e,i.id),r({event:`user-skill-reclaim-bundle-declined-removed`,scope:`user`,bundle:i.id})}catch(e){r({event:`user-skill-reclaim-bundle-remove-failed`,scope:`user`,bundle:i.id,error:e instanceof Error?e.message:String(e)})}continue}if(s===null&&o)try{await t.writeBundleDecision(e,a,!0)}catch(e){r({event:`user-skill-reclaim-grandfather-write-failed`,scope:`user`,bundle:i.id,error:e instanceof Error?e.message:String(e)})}u.push(i)}if(u.length===0)return{outcome:`skipped`,reason:`all-bundles-declined`};let d=u.every(t=>yf(e,zt[t.id],n));if(s!==null&&s===o&&d)return r({event:`user-skill-reclaim-skipped-version-current`,scope:`user`,version:o}),{outcome:`skipped`,reason:`version-current`};let f=[],p=c.length===Re.length,m=[];for(let{id:t,sourceDir:i}of u){let a=bf(e,zt[t],i,n,r,o);f.push(...a.entries),m.push({id:t,anyWritten:a.anyWritten,landed:a.anyDestinationSucceeded,centralFailed:a.entries.some(e=>e.kind===`central`&&e.outcome===`failed`),hostFailed:a.entries.some(e=>e.kind===`host`&&e.outcome===`failed`)})}let h=m.some(e=>e.centralFailed),g=m.every(e=>e.landed);if(p&&g&&!h){let n=null;try{await t.writeRecordedVersion(e,o),r({event:`user-skill-reclaim-version-recorded`,scope:`user`,version:o})}catch(e){n=e instanceof Error?e.message:String(e),r({event:`user-skill-reclaim-version-record-failed`,scope:`user`,version:o,error:n})}for(let{id:e,anyWritten:t}of m)i({ts:a(),surface:`cli-start`,target:`cli-hosts`,bundle:e,outcome:n===null?t?`installed`:`skip-current`:`failed`,version:o,...n===null?{}:{reason:`state-write-failed:${n}`}})}else{p||i({ts:a(),surface:`cli-start`,target:`cli-hosts`,outcome:`failed`,version:o,reason:`bundle-unresolved`});for(let{id:e,centralFailed:t,hostFailed:n}of m)!t&&!n||i({ts:a(),surface:`cli-start`,target:`cli-hosts`,bundle:e,outcome:`failed`,version:o,reason:n?`all-writes-failed`:`central-write-failed`})}return{outcome:`done`,version:o,entries:f}}async function Tf(e){let t=e.logger??gf,n=e.fs??mf,r=e.home??W(),i={...hf,...e.deps};if(e.reclaimDisableEnv===`1`)return t({event:`skill-repair-skipped`,reason:`reclaim-disabled`}),{status:`skipped`,reason:`reclaim-disabled`};let a=Cf(e.projectDir,r,i,n,t),o=await wf(r,i,n,t),s=cr(r),c=[],l=!1,u=!1;if(s.skillDirs.length>0||s.emptyDirs.length>0){if(e.confirmLegacyCleanup&&await e.confirmLegacyCleanup(s)){try{c=Qn(r,s)}catch(e){u=!0,t({event:`legacy-fanout-cleanup-refused`,scope:`user`,error:e instanceof Error?e.message:String(e)})}for(let e of c)t({event:`legacy-fanout-path-removed`,scope:`user`,path:e})}else l=!0,t({event:`legacy-fanout-cleanup-declined`,scope:`user`})}return{status:`done`,project:a,user:o,legacySwept:c,legacyCleanupDeclined:l,legacyCleanupFailed:u}}function Ef(e){return e.status===`skipped`?e.reason===`reclaim-disabled`?0:1:e.project.outcome===`skipped`||e.user.outcome===`skipped`&&e.user.reason!==`version-current`&&e.user.reason!==`all-bundles-declined`||e.project.entries.some(e=>e.outcome===`failed`)||e.user.outcome===`done`&&e.user.entries.some(e=>e.outcome===`failed`)?1:0}function Df(e){if(e.status===`skipped`)return`Skipped: ${e.reason}`;let t=[`Skill reclaim complete.`];if(e.project.outcome===`done`){let n=e.project.entries.filter(e=>e.outcome===`present`).length,r=e.project.entries.filter(e=>e.outcome===`created`).length,i=e.project.entries.filter(e=>e.outcome===`no-token`).length,a=e.project.entries.filter(e=>e.outcome===`failed`).length,o=e.project.entries.filter(e=>e.outcome===`skipped-global-collision`).length;t.push(` Project: ${n} present, ${r} created, ${i} no-token, ${a} failed.`),o>0&&t.push(` Skipped ${o} host(s) whose project config path is their user-global config (not a project directory).`)}else t.push(` Project: skipped (${e.project.reason}).`);if(e.user.outcome===`done`){let n=e.user.entries.filter(e=>e.outcome===`written`).length,r=e.user.entries.filter(e=>e.outcome===`skipped-present`).length,i=e.user.entries.filter(e=>e.outcome===`skipped-host-absent`||e.outcome===`skipped-collapsed-with-central`).length,a=e.user.entries.filter(e=>e.outcome===`failed`).length;t.push(` User (${e.user.version}): ${n} written, ${r} present, ${i} skipped, ${a} failed.`)}else t.push(` User: skipped (${e.user.reason}).`);return e.legacySwept.length>0?t.push(` Cleanup: removed ${e.legacySwept.length} path(s) from a pre-0.42 install.`):e.legacyCleanupFailed?t.push(` Cleanup: failed — see logs; pre-0.42 directories left in place.`):e.legacyCleanupDeclined&&t.push(` Cleanup: declined — pre-0.42 directories left in place.`),t.join(`
|
|
83
|
-
`)}function Of(){return new
|
|
84
|
-
`)}\n`),t.yes)return!0;if(!i.isTTY)return process.stdout.write(`${
|
|
85
|
-
`),plan:r,exitCode:1}}let a
|
|
86
|
-
`)}function Pf(e,t){let n=[],r=e.created.filter(e=>e.kind===`folder`),i=e.created.filter(e=>e.kind===`file`);if(r.length>0){n.push(
|
|
87
|
-
`)}async function Ff(e,t){let n=
|
|
80
|
+
`),columns:i,wide:i>a}}function Rd(e,t){let n=e.match(/^#\s+(.+)$/m);return n?n[1].trim():t}function zd(e,t){return`# ${e}\n\n${t}\n`}const Bd=[`links`,`frontmatter`,`callouts`,`images`,`tables`],Vd=/\.mdx?$/i;function Hd(e){return{isNotionExport:e,transforms:{links:0,frontmatter:0,callouts:0,images:0,tables:0},assetsExtracted:0,stubsCreated:0,csvsRemoved:0,wideTables:[],ambiguousTitleLinks:0,unreadable:[],filesChanged:0}}function Ud(e,t={}){let n=t.selected??new Set(Bd),r=Dd(e);if(!r&&!t.force)return{changes:[],assets:[],deletions:[],report:Hd(!1)};let i=Hd(r),a=wd(e),o=hd(a,{onUnreadable:e=>i.unreadable.push(e)}),s=n.has(`tables`),c=new Map,l=new Set;for(let e of o){e.stubPath&&l.add(e.stubPath);for(let t of e.rowFiles)c.set(t,e)}let u=[],d=[],f=[];for(let e of a){if(!Vd.test(e)||s&&l.has(e))continue;let r;try{r=B(e,`utf8`)}catch{i.unreadable.push(e);continue}let a=r,o=(e,t)=>{a!==t&&(i.transforms[e]+=1)};if(n.has(`images`)){let n=a,r=ad(a,Lr(e),{strip:t.stripBase64});a=r.markdown;for(let t of r.assets)d.push({path:F(P(e),t.filename),bytes:t.bytes});i.assetsExtracted+=r.assets.length,o(`images`,n)}if(n.has(`callouts`)){let e=a;a=td(a),o(`callouts`,e)}if(n.has(`frontmatter`)){let t=c.get(e);if(t){let e=a;a=Pd(a,t.propertyKeys),o(`frontmatter`,e)}}if(n.has(`links`)){let e=a;a=Cd(a,{redirectCsv:s}),o(`links`,e)}a!==r&&u.push({path:e,content:a})}if(s)for(let e of o){let r=Ld(e.csvText,{linkForTitle:t=>{let n=fd(e.folderIndex,t);return n.ambiguous&&(i.ambiguousTitleLinks+=1),n.path?I(P(e.stubTargetPath),n.path):null}});if(r.columns===0)continue;let a=e.stubPath??e.stubTargetPath,o=null;if(e.stubPath)try{o=B(e.stubPath,`utf8`)}catch{i.unreadable.push(e.stubPath);continue}let c=zd(o===null?e.fallbackTitle:Rd(o,e.fallbackTitle),r.table);n.has(`links`)&&(c=Cd(c,{redirectCsv:s})),r.wide&&i.wideTables.push(a),o===null?(u.push({path:a,content:c}),i.stubsCreated+=1,i.transforms.tables+=1):c!==o&&(u.push({path:a,content:c}),i.transforms.tables+=1),t.removeCsv&&(f.push(e.csvPath),i.csvsRemoved+=1)}return i.filesChanged=new Set(u.map(e=>e.path)).size,{changes:u,assets:d,deletions:f,report:i}}function Wd(e){for(let t of e.assets)z(P(t.path),{recursive:!0}),ti(t.path,t.bytes);for(let t of e.changes)z(P(t.path),{recursive:!0}),ti(t.path,t.content,`utf8`);for(let t of e.deletions)try{H(t)}catch(e){if(e.code!==`ENOENT`)throw e}}const Gd={images:`Inline base64 images extracted`,callouts:`Notion <aside> callouts converted`,frontmatter:`Row properties lifted to frontmatter`,tables:`Databases rendered as tables`,links:`Internal links decoded`},Kd=[`images`,`callouts`,`frontmatter`,`tables`,`links`];function qd(e,t){let n=[];n.push(t.applied?`Applied Notion cleanup in ${t.dir}`:`Dry run — no changes written (${t.dir})`);for(let t of Kd)n.push(` ${Gd[t]}: ${e.transforms[t]}`);return n.push(` Assets written: ${e.assetsExtracted}`),e.stubsCreated>0&&n.push(` Database pages created (CSVs without a stub): ${e.stubsCreated}`),e.csvsRemoved>0&&n.push(` CSV files removed: ${e.csvsRemoved}`),n.push(` Files changed: ${e.filesChanged}`),e.ambiguousTitleLinks>0&&n.push(` Ambiguous title links left as plain text: ${e.ambiguousTitleLinks}`),e.wideTables.length>0&&n.push(` Wide tables (>15 columns): ${e.wideTables.length}`),e.unreadable.length>0&&n.push(` Skipped unreadable files: ${e.unreadable.length}`),!t.applied&&e.filesChanged+e.assetsExtracted+e.csvsRemoved>0&&(n.push(``),n.push(`Re-run with --apply to write these changes.`)),n.join(`
|
|
81
|
+
`)}function Jd(e,t){return JSON.stringify({applied:t.applied,...e},null,2)}function Yd(e){let t=new Set(Bd);return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0).map(e=>{if(!t.has(e))throw Error(`Unknown transform "${e}". Valid transforms: ${Bd.join(`, `)}`);return e})}function Xd(e,t){let n=new Set(Bd);if(e&&(n=new Set(Yd(e))),t)for(let e of Yd(t))n.delete(e);return n}function Zd(){let e=new D(`migrate`).description(`Migrate content from other tools into Open Knowledge`);return e.command(`notion [dir]`).description(`Clean up a Notion "Markdown & CSV" export in place (dry-run unless --apply)`).option(`--apply`,`write changes to disk (default: dry-run preview)`).option(`--strip-base64`,`delete inline base64 images instead of extracting them to files`).option(`--remove-csv`,`delete each "_all.csv" once its table page exists (destructive)`).option(`--only <transforms>`,`run only these transforms (comma-separated: links,frontmatter,callouts,images,tables)`).option(`--skip <transforms>`,`skip these transforms (comma-separated)`).option(`--force`,`run even if the directory is not detected as a Notion export`).option(`--json`,`print a machine-readable JSON report`).action((e,t)=>{let n=L(e??process.cwd()),r;try{r=Xd(t.only,t.skip)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=2;return}let i=Ud(n,{selected:r,stripBase64:t.stripBase64??!1,removeCsv:t.removeCsv??!1,force:t.force??!1}),{report:a}=i;if(!a.isNotionExport&&!t.force){t.json?console.log(JSON.stringify({refused:!0,reason:`not-a-notion-export`,dir:n},null,2)):console.error(`Not a Notion export: ${n}\nNo id-suffixed pages, "_all.csv", or inline base64 images were found. Re-run with --force to override.`),process.exitCode=2;return}if(t.apply)try{Wd(i)}catch(e){console.error(`Failed to apply changes: ${e instanceof Error?e.message:String(e)}`),process.exitCode=4;return}console.log(t.json?Jd(a,{applied:t.apply??!1}):qd(a,{applied:t.apply??!1,dir:n})),a.filesChanged===0&&a.assetsExtracted===0&&i.deletions.length===0?process.exitCode=1:t.apply&&(a.ambiguousTitleLinks>0||a.wideTables.length>0)&&(process.exitCode=3)}),e}function Qd(e,t,n){return t===`darwin`?n&&e.startsWith(`openknowledge://`)?{command:`/usr/bin/open`,args:[`-a`,n,e]}:{command:`/usr/bin/open`,args:[e]}:t===`win32`?e.startsWith(`http://`)||e.startsWith(`https://`)?{command:`explorer.exe`,args:[e]}:{command:`rundll32.exe`,args:[`url.dll,FileProtocolHandler`,e]}:{command:`xdg-open`,args:[e]}}function $d(e,t={}){let n=Qd(e,t.platform??process.platform,t.desktopBundlePath);return Un(n.command,n.args,{spawn:t.spawn,env:t.env,timeoutMs:t.timeoutMs})}function ef(e,t,n=process.platform){let r=Qd(t,n).command;switch(e){case`not-installed`:return`${r} is not installed or cannot be executed`;case`timeout`:return`${r} did not start in time`;case`spawn-error`:return`${r} could not be started`}}function tf(e=()=>Bn(Kn())){return{detectBundlePath:()=>e().bundlePath??null,resolveBaseUrl:e=>Ut({lockDir:E(e)}).baseUrl,classifyName:(e,t)=>{let n=F(e,t);try{return V(n).isDirectory()?`folder`:`doc`}catch(e){let t=e?.code;return t!==`ENOENT`&&t!==`ENOTDIR`&&process.stderr.write(`[ok open] statSync failed for ${n} (${t??`unknown`}); treating as a doc\n`),`doc`}},openTarget:$d,findAncestorProject:e=>lt(P(L(e)))?.rootPath??null,isProjectRoot:e=>lt(e)?.distance===0,enclosingProject:e=>lt(L(e))?.rootPath??null,log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}function nf(e){return e.startsWith(`/`)||e.includes(`\\`)||e.split(`/`).includes(`..`)}function rf(e){return e.error("No OpenKnowledge desktop app found and no UI is running. Install it from https://openknowledge.ai/download, or run `ok start` to serve the editor, then retry."),1}async function af(e,t,n,r,i,a){let o=await i.openTarget(e,a?{desktopBundlePath:a}:{});if(!o.ok)return i.error(`Could not open ${e}: ${ef(o.reason,e)}.`),1;if(i.log(t),!r)return i.log(`Working directory: ${n} (not an OpenKnowledge project).`),0;i.log(`Project: ${n}`);let s=i.findAncestorProject(n);return s!==null&&i.log(`Note: this project (${n}) is nested inside another OpenKnowledge project at ${s}. Pass --project to choose explicitly.`),0}async function of(e,t,n){let r=t.project!==void 0,i=r?null:n.enclosingProject(process.cwd()),a=L(t.project??i??process.cwd()),o=r||i!==null,s=e.replace(/\/+$/,``);if(r&&!n.isProjectRoot(a))return n.error(`Cannot open with --project ${a}: no .ok/config.yml there, so it is not an OpenKnowledge project.`),1;if(!s)return n.error("Nothing to open: pass a doc, folder, or skill name (e.g. `ok open specs/foo/SPEC`)."),1;if(nf(s))return n.error(`Invalid name "${s}": must be a relative path with no '..' segments, leading '/', or backslashes.`),1;if(t.skill===!0){let e=t.scope??`project`;if(!C.includes(e))return n.error(`Invalid --scope "${t.scope}": expected one of ${C.join(`, `)}.`),1;let r=n.detectBundlePath();if(r)return af(`openknowledge://open?project=${encodeURIComponent(a)}&doc=${encodeURIComponent(`__skill__/${e}/${s}`)}`,`Opening skill ${s} (${e}) in the OpenKnowledge desktop app.`,a,o,n,r);let i=n.resolveBaseUrl(a);if(i){let t=`${i}/#/${Me(e,s)}`;return af(t,`Opening skill ${s} (${e}) in your browser: ${t}`,a,o,n)}return rf(n)}let c=/\/+$/.test(e)||n.classifyName(a,s)===`folder`,l=n.detectBundlePath();if(c){if(l)return af(`openknowledge://open?project=${encodeURIComponent(a)}&folder=${encodeURIComponent(s)}`,`Opening folder ${s} in the OpenKnowledge desktop app.`,a,o,n,l);let e=n.resolveBaseUrl(a);if(e){let t=`${e}/#/${un(s)}`;return af(t,`Opening folder ${s} in your browser: ${t}`,a,o,n)}return rf(n)}if(l)return af(`openknowledge://open?project=${encodeURIComponent(a)}&doc=${encodeURIComponent(s)}`,`Opening ${s} in the OpenKnowledge desktop app.`,a,o,n,l);let u=n.resolveBaseUrl(a);if(u){let e=`${u}/#/${$e(s)}`;return af(e,`Opening ${s} in your browser: ${e}`,a,o,n)}return rf(n)}function sf(){return new D(`open`).description(`Open a doc, folder, or skill in the OK Desktop app (falls back to the browser UI). Docs and folders are auto-detected — no flag needed.`).argument(`<name>`,`Doc path (specs/foo/SPEC), folder path (specs/foo or specs/foo/), or a skill name with --skill`).option(`--skill`,`Open <name> as a skill in the skill editor`).option(`--scope <scope>`,`Skill scope when --skill is set: ${C.join(` | `)}`,`project`).option(`--project <dir>`,`Project root (defaults to the project enclosing the current directory)`).action(async(e,t)=>{process.exitCode=await of(e,t,tf())})}function cf(e){return new D(`preview`).description(`Show what content the watcher will track (read-only)`).action(async()=>{let{previewContent:t,formatPreviewBlock:n}=await import(`./preview-D4hBn5zd.mjs`),r=e(),i=process.cwd(),a=st(r,i),o;try{o=t({projectDir:i,contentDir:a})}catch(e){console.error(`Content preview failed: ${e instanceof Error?e.message:String(e)}`),process.exitCode=1;return}process.stdout.write(`${n(o,i)}\n`),o.totalCount===0&&o.warnings.length>0&&(process.exitCode=1)})}function lf(e,t){e&&process.stdout.write(`${JSON.stringify(t)}\n`)}async function uf(e,t,n=process.cwd()){let r=e.op??`sync`,i=E(n),a=on(i);if(a&&a.port>0){let t=`http://127.0.0.1:${a.port}/api/sync/trigger`;e.json||process.stderr.write(`Triggering ${r} via running server (port ${a.port})\n`);try{let n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`,...c({kind:`cli`,runtimeVersion:Kt})},body:JSON.stringify({op:r})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.title??e.error??e.message??`Server responded with ${n.status}`)}lf(e.json,{type:`triggered`,op:r,port:a.port}),e.json||process.stderr.write(`✓ ${r} triggered\n`);return}catch(t){let n=t instanceof Error?t.message:String(t);e.json||process.stderr.write(`Server trigger failed (${n}), running directly\n`)}}e.json||process.stderr.write(`Running ${r} directly (no live server)\n`);let o=yt({baseDir:n});if(r===`sync`||r===`pull`){lf(e.json,{type:`step`,step:`pull`});let t=await o.pull();lf(e.json,{type:`pull`,summary:t.summary}),e.json||process.stderr.write(` pull: ${t.summary.changes} changes\n`)}(r===`sync`||r===`push`)&&(lf(e.json,{type:`step`,step:`push`}),await o.push(),lf(e.json,{type:`push`,ok:!0}),e.json||process.stderr.write(` push: ok
|
|
82
|
+
`)),lf(e.json,{type:`complete`,op:r}),e.json||process.stderr.write(`✓ ${r} complete\n`)}function df(e){return new D(`sync`).description(`Commit, pull, and push to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await uf({json:t.json,op:`sync`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ sync failed: ${n}\n`),process.exit(1)}})}function ff(e){return new D(`pull`).description(`Pull changes from the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await uf({json:t.json,op:`pull`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ pull failed: ${n}\n`),process.exit(1)}})}function pf(e){return new D(`push`).description(`Push commits to the remote`).option(`--json`,`Output JSONL progress events`,!1).action(async t=>{try{await uf({json:t.json,op:`push`},e())}catch(e){let n=e instanceof Error?e.message:String(e);t.json?process.stdout.write(`${JSON.stringify({type:`error`,message:n})}\n`):process.stderr.write(`✗ push failed: ${n}\n`),process.exit(1)}})}const mf={existsSync:e=>R(e),isDirectory:e=>{try{return V(e).isDirectory()}catch(e){if(e.code===`ENOENT`)return!1;throw e}},readdirSync:e=>Xr(e),readFileSync:e=>B(e),writeFileSync:(e,t)=>{ti(e,t)},mkdirSync:(e,t)=>{z(e,t)},rmSync:(e,t)=>{ei(e,t)}},hf={resolveProjectBundledSkillDir:()=>it(`project`,{checkDesktop:!1}),resolveUserBundledSkillDir:e=>it(e,{checkDesktop:!1}),readBundledVersion:()=>nt(),readRecordedVersion:e=>It(e,`cli-hosts`),writeRecordedVersion:(e,t)=>gt(e,`cli-hosts`,t,`cli-start`),recordEvent:e=>We(e),readBundleDecision:(e,t)=>tn(e,t),writeBundleDecision:(e,t,n)=>Xt(e,t,n),removeBundleFromDisk:(e,t)=>fr(e,t)};function gf(e){process.stderr.write(`${JSON.stringify(e)}\n`)}function _f(e,t,n){n.rmSync(t,{recursive:!0,force:!0}),n.mkdirSync(P(t),{recursive:!0}),vf(e,t,n)}function vf(e,t,n){n.mkdirSync(t,{recursive:!0});for(let r of n.readdirSync(e)){let i=F(e,r),a=F(t,r);n.isDirectory(i)?vf(i,a,n):n.writeFileSync(a,n.readFileSync(i))}}function yf(e,t,n){return n.existsSync(F(e,`.agents`,`skills`,t))||se.some(r=>n.existsSync(F(e,r.skillsRoot,t)))}function bf(e,t,n,r,i,a){let o=[],s=F(e,`.agents`,`skills`,t);if(yf(e,t,r)){r.existsSync(s)&&o.push({kind:`central`,path:s,outcome:`skipped-present`});for(let n of se){let i=F(e,n.skillsRoot,t);if(i!==s){if(!r.existsSync(F(e,n.hostDir))){o.push({kind:`host`,editorId:n.editorId,hostDir:n.hostDir,path:i,outcome:`skipped-host-absent`});continue}r.existsSync(i)&&o.push({kind:`host`,editorId:n.editorId,hostDir:n.hostDir,path:i,outcome:`skipped-present`})}}return{entries:o,anyWritten:!1,anyDestinationSucceeded:!0}}let c=r.existsSync(F(e,`.agents`));if(c&&r.existsSync(s))o.push({kind:`central`,path:s,outcome:`skipped-present`});else if(c)try{_f(n,s,r),o.push({kind:`central`,path:s,outcome:`written`}),i({event:`user-skill-reclaim-central-written`,scope:`user`,path:s,preexisting:!1,version:a})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({kind:`central`,path:s,outcome:`failed`,error:t}),i({event:`user-skill-reclaim-central-failed`,scope:`user`,path:s,error:t})}for(let c of se){let l=F(e,c.hostDir),u=F(e,c.skillsRoot,t);if(u===s){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-collapsed-with-central`});continue}if(!r.existsSync(l)){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-host-absent`});continue}if(r.existsSync(u)){o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`skipped-present`});continue}try{_f(n,u,r),o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`written`}),i({event:`user-skill-reclaim-host-written`,scope:`user`,editorId:c.editorId,hostDir:c.hostDir,path:u,preexisting:!1,version:a})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({kind:`host`,editorId:c.editorId,hostDir:c.hostDir,path:u,outcome:`failed`,error:t}),i({event:`user-skill-reclaim-host-failed`,scope:`user`,editorId:c.editorId,hostDir:c.hostDir,path:u,error:t})}}return{entries:o,anyWritten:o.some(e=>e.outcome===`written`),anyDestinationSucceeded:o.some(e=>e.outcome===`written`||e.outcome===`skipped-present`)}}function xf(e,t){if(!e)return!1;try{return t.existsSync(e)?t.readFileSync(e).toString(`utf8`).includes(`# ok-mcp-`):!1}catch{return!1}}function Sf(e,t,n,r){if(!e||!t)return!1;let i;try{i=e.configPath(n,r)}catch{return!1}let a=e=>F(ut(P(e)),Lr(e));return a(t)===a(i)}function Cf(e,t,n,r,i){let a;try{a=n.resolveProjectBundledSkillDir()}catch(e){return i({event:`project-skill-reclaim-bundle-missing`,scope:`project`,error:e instanceof Error?e.message:String(e)}),{outcome:`skipped`,reason:`bundle-missing`}}let o=[];for(let n of Tn){let s=F(e,n.hostDir,`skills`,`open-knowledge`),c=F(s,`SKILL.md`);if(r.existsSync(c)){o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`present`});continue}let l=En[n.editorId],u=l?.projectConfigPath?.(e);if(Sf(l,u,e,t)){o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`skipped-global-collision`}),i({event:`project-skill-reclaim-skipped-global-collision`,scope:`project`,editorId:n.editorId,path:s});continue}if(!xf(u,r)){o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`no-token`}),i({event:`project-skill-reclaim-no-token`,scope:`project`,editorId:n.editorId,path:s});continue}try{xn(s,e),_f(a,s,r),o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`created`}),i({event:`project-skill-reclaim-created`,scope:`project`,editorId:n.editorId,path:s})}catch(e){let t=e instanceof Error?e.message:String(e);o.push({editorId:n.editorId,hostDir:n.hostDir,path:s,outcome:`failed`,error:t}),i({event:`project-skill-reclaim-failed`,scope:`project`,editorId:n.editorId,path:s,error:t})}}return{outcome:`done`,entries:o}}async function wf(e,t,n,r){let i=e=>{t.recordEvent(e).catch(()=>{})},o=()=>new Date().toISOString(),s;try{s=await t.readBundledVersion()}catch(e){let t=e instanceof Error?e.message:String(e);return r({event:`user-skill-reclaim-version-read-failed`,scope:`user`,error:t}),i({ts:o(),surface:`cli-start`,target:`cli-hosts`,bundle:`discovery`,outcome:`failed`,reason:`version-read-failed:${t}`}),{outcome:`skipped`,reason:`version-read-failed`}}let c;try{c=await t.readRecordedVersion(e)}catch(e){r({event:`user-skill-reclaim-version-read-error`,scope:`user`,error:e instanceof Error?e.message:String(e)}),c=null}let l=[],u=null;for(let e of Re)try{l.push({id:e,sourceDir:t.resolveUserBundledSkillDir(e)})}catch(e){u=e instanceof Error?e.message:String(e)}if(l.length===0)return r({event:`user-skill-reclaim-bundle-missing`,scope:`user`,error:u??`no user-global bundles`}),i({ts:o(),surface:`cli-start`,target:`cli-hosts`,outcome:`failed`,reason:`bundle-missing:${u}`}),{outcome:`skipped`,reason:`bundle-missing`};let d=[];for(let i of l){let o=Bt[i.id],s=yf(e,o,n),c=await t.readBundleDecision(e,o).catch(()=>null);if(!a(c,{installedOnDisk:s})){if(s)try{t.removeBundleFromDisk(e,i.id),r({event:`user-skill-reclaim-bundle-declined-removed`,scope:`user`,bundle:i.id})}catch(e){r({event:`user-skill-reclaim-bundle-remove-failed`,scope:`user`,bundle:i.id,error:e instanceof Error?e.message:String(e)})}continue}if(c===null&&s)try{await t.writeBundleDecision(e,o,!0)}catch(e){r({event:`user-skill-reclaim-grandfather-write-failed`,scope:`user`,bundle:i.id,error:e instanceof Error?e.message:String(e)})}d.push(i)}if(d.length===0)return{outcome:`skipped`,reason:`all-bundles-declined`};let f=d.every(t=>yf(e,Bt[t.id],n));if(c!==null&&c===s&&f)return r({event:`user-skill-reclaim-skipped-version-current`,scope:`user`,version:s}),{outcome:`skipped`,reason:`version-current`};let p=[],m=l.length===Re.length,h=[];for(let{id:t,sourceDir:i}of d){let a=bf(e,Bt[t],i,n,r,s);p.push(...a.entries),h.push({id:t,anyWritten:a.anyWritten,landed:a.anyDestinationSucceeded,centralFailed:a.entries.some(e=>e.kind===`central`&&e.outcome===`failed`),hostFailed:a.entries.some(e=>e.kind===`host`&&e.outcome===`failed`)})}let g=h.some(e=>e.centralFailed),_=h.every(e=>e.landed);if(m&&_&&!g){let n=null;try{await t.writeRecordedVersion(e,s),r({event:`user-skill-reclaim-version-recorded`,scope:`user`,version:s})}catch(e){n=e instanceof Error?e.message:String(e),r({event:`user-skill-reclaim-version-record-failed`,scope:`user`,version:s,error:n})}for(let{id:e,anyWritten:t}of h)i({ts:o(),surface:`cli-start`,target:`cli-hosts`,bundle:e,outcome:n===null?t?`installed`:`skip-current`:`failed`,version:s,...n===null?{}:{reason:`state-write-failed:${n}`}})}else{m||i({ts:o(),surface:`cli-start`,target:`cli-hosts`,outcome:`failed`,version:s,reason:`bundle-unresolved`});for(let{id:e,centralFailed:t,hostFailed:n}of h)!t&&!n||i({ts:o(),surface:`cli-start`,target:`cli-hosts`,bundle:e,outcome:`failed`,version:s,reason:n?`all-writes-failed`:`central-write-failed`})}return{outcome:`done`,version:s,entries:p}}async function Tf(e){let t=e.logger??gf,n=e.fs??mf,r=e.home??U(),i={...hf,...e.deps};if(e.reclaimDisableEnv===`1`)return t({event:`skill-repair-skipped`,reason:`reclaim-disabled`}),{status:`skipped`,reason:`reclaim-disabled`};let a=Cf(e.projectDir,r,i,n,t),o=await wf(r,i,n,t),s=lr(r),c=[],l=!1,u=!1;if(s.skillDirs.length>0||s.emptyDirs.length>0){if(e.confirmLegacyCleanup&&await e.confirmLegacyCleanup(s)){try{c=$n(r,s)}catch(e){u=!0,t({event:`legacy-fanout-cleanup-refused`,scope:`user`,error:e instanceof Error?e.message:String(e)})}for(let e of c)t({event:`legacy-fanout-path-removed`,scope:`user`,path:e})}else l=!0,t({event:`legacy-fanout-cleanup-declined`,scope:`user`})}return{status:`done`,project:a,user:o,legacySwept:c,legacyCleanupDeclined:l,legacyCleanupFailed:u}}function Ef(e){return e.status===`skipped`?e.reason===`reclaim-disabled`?0:1:e.project.outcome===`skipped`||e.user.outcome===`skipped`&&e.user.reason!==`version-current`&&e.user.reason!==`all-bundles-declined`||e.project.entries.some(e=>e.outcome===`failed`)||e.user.outcome===`done`&&e.user.entries.some(e=>e.outcome===`failed`)?1:0}function Df(e){if(e.status===`skipped`)return`Skipped: ${e.reason}`;let t=[`Skill reclaim complete.`];if(e.project.outcome===`done`){let n=e.project.entries.filter(e=>e.outcome===`present`).length,r=e.project.entries.filter(e=>e.outcome===`created`).length,i=e.project.entries.filter(e=>e.outcome===`no-token`).length,a=e.project.entries.filter(e=>e.outcome===`failed`).length,o=e.project.entries.filter(e=>e.outcome===`skipped-global-collision`).length;t.push(` Project: ${n} present, ${r} created, ${i} no-token, ${a} failed.`),o>0&&t.push(` Skipped ${o} host(s) whose project config path is their user-global config (not a project directory).`)}else t.push(` Project: skipped (${e.project.reason}).`);if(e.user.outcome===`done`){let n=e.user.entries.filter(e=>e.outcome===`written`).length,r=e.user.entries.filter(e=>e.outcome===`skipped-present`).length,i=e.user.entries.filter(e=>e.outcome===`skipped-host-absent`||e.outcome===`skipped-collapsed-with-central`).length,a=e.user.entries.filter(e=>e.outcome===`failed`).length;t.push(` User (${e.user.version}): ${n} written, ${r} present, ${i} skipped, ${a} failed.`)}else t.push(` User: skipped (${e.user.reason}).`);return e.legacySwept.length>0?t.push(` Cleanup: removed ${e.legacySwept.length} path(s) from a pre-0.42 install.`):e.legacyCleanupFailed?t.push(` Cleanup: failed — see logs; pre-0.42 directories left in place.`):e.legacyCleanupDeclined&&t.push(` Cleanup: declined — pre-0.42 directories left in place.`),t.join(`
|
|
83
|
+
`)}function Of(){return new D(`repair-skills`).description("Refresh bundled SKILL.md files for installed AI editors (project-local + user-global). Runs automatically during `ok start`; this command forces an explicit sweep.").option(`-y, --yes`,`Skip the confirmation prompt for removing directories left by a pre-0.42 install.`).action(async e=>{let t=await Tf({projectDir:L(process.cwd()),reclaimDisableEnv:process.env.OK_RECLAIM_DISABLE??null,confirmLegacyCleanup:t=>kf(t,{yes:e.yes===!0})});process.stdout.write(`${Df(t)}\n`),process.exitCode=Ef(t)})}async function kf(e,t){let n=U(),r=e=>`~/${I(n,e)}`,i=t.input??process.stdin,a=[``,N(`A previous version of OpenKnowledge installed its skill into agent tools you may never have used.`),k(`(Versions before 0.42 wrote to every host a third-party installer knew about — see issue #820.)`)];if(e.skillDirs.length>0&&a.push(``,`${N(`Remove OpenKnowledge skills:`)} ${e.skillDirs.length}`,...e.skillDirs.map(e=>` ${r(e)}`)),e.emptyDirs.length>0){let t=e.skillDirs.length>0?`Then remove these, which hold nothing else once the above are gone:`:`Remove these empty directories, left behind by that install:`;a.push(``,`${N(t)} ${e.emptyDirs.length}`,...e.emptyDirs.map(e=>` ${r(e)}`))}if(a.push(``,k(`Nothing outside these paths is touched. A directory that still holds anything is kept.`)),process.stdout.write(`${a.join(`
|
|
84
|
+
`)}\n`),t.yes)return!0;if(!i.isTTY)return process.stdout.write(`${M("Not a terminal — skipping cleanup. Re-run with `ok repair-skills --yes` to remove these.")}\n`),!1;let o=ci({input:i,output:process.stdout});try{let e=(await o.question(`\n${N(`Remove them?`)} ${k(`[y/N] `)}`)).trim().toLowerCase();return e===`y`||e===`yes`}finally{o.close()}}function Af(e,t){if(e.packSkillHomeRefusal===void 0)return``;if(e.packSkillHomeRefusal===`home-escapes-project`)return`\n${M(`!`)} The ${t} skills were not installed: this project's skill folder is a symlink pointing outside the project, and Open Knowledge will not write through it. Replace it with a real directory inside the project, then run \`ok seed\` again.`;let n=[...new Set([ve,...he.map(e=>ce[e])].filter(e=>e!==null).map(Oe))].map(e=>`${e}/`);return`\n${M(`!`)} The ${t} skills were not installed: this project has no agent folder for them. Open Knowledge only writes skills into a folder that already exists (${n.join(`, `)}) and never creates one for you. Create the folder your agent uses, then run \`ok seed\` again to install them.`}function jf(e){return typeof e==`string`&&Tt.includes(e)}async function Mf(e={}){let t=L(e.cwd??process.cwd()),n=e.pack??`knowledge-base`;if(!en[n])return{status:`failed`,message:`${j(`Error:`)} Unknown pack "${n}". Available: ${Tt.join(`, `)}`,exitCode:1};let r;try{r=await qt({projectDir:t,rootDir:e.root,packId:n,skipPrerequisite:e.dryRun===!0})}catch(e){return e instanceof Ht?{status:`prerequisite-missing`,message:`${j(`Error:`)} ${e.message}`,exitCode:1}:{status:`failed`,message:`${j(`Error:`)} ${e instanceof Error?e.message:String(e)}`,exitCode:1}}if(!_e(r)){let e=en[n].name,t=(r.packSkills??[]).filter(e=>e.conflict).map(e=>`\n${M(`!`)} Skill "${e.name}" is your own — the pack's version is not installed. Rename yours to install the pack's version.`).join(``),i=Af(r,e);return{status:`no-op`,message:`${A(`Your ${e} pack is already seeded.`)}${i}${t}${i===``?`\n${k(`Nothing to do.`)}`:``}`,plan:r,exitCode:0}}if(e.dryRun){let e=Zt(en[n]);return{status:`dry-run`,message:`${N(`Reference this pack for inspiration (dry-run — no changes made):`)}\n\n${e}\n\n${N(`Plan:`)}\n\n${Pf(r,t)}`,plan:r,exitCode:0}}if(!e.yes&&!await Ff(`${N(`Plan:`)}\n\n${Pf(r,t)}\n\n${N(`Apply?`)} ${k(`[Y/n] `)}`,e.confirmStream))return{status:`cancelled`,message:k(`Cancelled.`),plan:r,exitCode:0};let i=await Ae(r,{projectDir:t,packId:n});if(i.errors.length>0){let e=i.errors.map(e=>` ${j(`✗`)} ${e.path}: ${e.error}`);return{status:`failed`,message:[`${M(`Applied`)} ${i.applied} entries, ${M(String(i.errors.length))} error(s):`,...e].join(`
|
|
85
|
+
`),plan:r,exitCode:1}}let a=en[n].name,o=i.packSkillsInstalled.length>0?`\n${k(`Installed the ${a} skills for: ${i.packSkillsInstalled.join(`, `)}`)}`:``,s=i.pluginsEnabled.length>0?`\n${k(`Enabled plugin(s) included with this pack: ${i.pluginsEnabled.join(`, `)} — turn off any time in Settings.`)}`:``,c=(i.packSkillConflicts??[]).map(e=>e.hosts===void 0||e.hosts.length===0?`\n${M(`!`)} Skill "${e.name}" was not installed — you already have your own skill with that name. Rename yours if you want the pack's version.`:`\n${M(`!`)} Skill "${e.name}" was not installed for ${e.hosts.join(`, `)} — you already have your own skill with that name there. Rename yours if you want the pack's version.`).join(``);return{status:`applied`,message:`${A(`✓ Seeded ${a}`)} ${k(`(${i.applied} entries, ${i.durationMs}ms)`)}${o}${s}${Af(r,a)}${c}`,plan:r,exitCode:0}}function Nf(){let e=[N(`Available packs:`)];for(let t of Tt){let n=en[t];e.push(` ${A(t)} ${k(`—`)} ${n.name}: ${n.description}`)}return e.join(`
|
|
86
|
+
`)}function Pf(e,t){let n=[],r=e.created.filter(e=>e.kind===`folder`),i=e.created.filter(e=>e.kind===`file`);if(r.length>0){n.push(N(`Folders to create:`));for(let e of r)n.push(` ${A(`+`)} ${O(I(t,L(t,e.path))||e.path)}${k(`/`)}`)}if(i.length>0){n.length>0&&n.push(``),n.push(N(`Files to create:`));for(let e of i)n.push(` ${A(`+`)} ${O(I(t,L(t,e.path))||e.path)}`)}if(e.skipped.length>0){n.length>0&&n.push(``),n.push(k(`Already present (skipped):`));for(let t of e.skipped)n.push(` ${k(`· ${t.path} (${t.reason})`)}`)}if(e.warnings.length>0){n.length>0&&n.push(``),n.push(M(`Warnings:`));for(let t of e.warnings)n.push(` ${M(`!`)} ${t}`)}let a=(e.packSkills??[]).filter(e=>e.conflict);if(a.length>0){n.length>0&&n.push(``),n.push(M(`Name collisions:`));for(let e of a)n.push(` ${M(`!`)} Skill "${e.name}" is your own — the pack's version will not be installed. Rename yours to install the pack's version.`)}return n.join(`
|
|
87
|
+
`)}async function Ff(e,t){let n=ci({input:t??process.stdin,output:process.stdout});try{let t=(await n.question(e)).trim().toLowerCase();return t===``||t===`y`||t===`yes`}finally{n.close()}}function If(){return new D(`seed`).description(`Scaffold a starter pack into the project. Defaults to "${Pe}" — the Karpathy three-layer knowledge base. Use --pack to pick a different pack (run with --list-packs to see all). Use --root to place pack folders inside a subfolder instead of the project root.`).argument(`[path]`,`Project directory (defaults to cwd)`).option(`-p, --pack <id>`,`Starter pack to scaffold. One of: ${Tt.join(`, `)}. Defaults to "${Pe}".`).option(`-r, --root <path>`,`Subfolder (relative to the project dir) to scaffold into — created if missing. Defaults to the project root.`).option(`--list-packs`,`List available starter packs and exit.`).option(`-y, --yes`,`Skip confirmation prompt`).option(`--dry-run`,`Print the plan and exit without writing`).action(async(e,t)=>{if(t.listPacks){process.stdout.write(`${Nf()}\n`);return}if(t.pack!==void 0&&!jf(t.pack)){process.stderr.write(`${j(`Error:`)} Unknown pack "${t.pack}". Available: ${Tt.join(`, `)}\n`),process.exitCode=1;return}let n=await Mf({cwd:e??process.cwd(),pack:t.pack,root:t.root,yes:t.yes,dryRun:t.dryRun});process.stdout.write(`${n.message}\n`),n.exitCode!==0&&(process.exitCode=n.exitCode)})}async function Lf(e,t,n){try{return await e.repos.get({owner:t,repo:n}),{kind:`ok`,available:!1}}catch(e){let t=e.status;return t===404?{kind:`ok`,available:!0}:t===401?{kind:`auth-required`}:{kind:`network`}}}async function Rf(e,t){let{host:n,owner:r,name:i,json:a}=e;W(n);let o=await qa(n,t);if(o==null){if(a){process.stdout.write(`${JSON.stringify({type:`error`,code:`auth-required`})}\n`);return}process.stderr.write(`Not logged in to ${n}\n`),process.exit(1)}let s=n===`github.com`?void 0:`https://${n}/api/v3`,c=await Lf(new K({auth:o,...s?{baseUrl:s}:{}}),r,i);if(c.kind===`ok`){a?process.stdout.write(`${JSON.stringify({type:`name-check`,available:c.available})}\n`):process.stdout.write(c.available?`available
|
|
88
88
|
`:`taken
|
|
89
|
-
`);return}if(a){process.stdout.write(`${JSON.stringify({type:`error`,code:c.kind})}\n`);return}process.stderr.write(`✗ share name-check failed: ${c.kind}\n`),process.exit(1)}function zf(e){return new
|
|
90
|
-
`)??``}\n${t.message??``}`.toLowerCase();return n===401?`auth-required`:n===403?i?.[`x-github-sso`]||a.includes(`saml`)||a.includes(`sso`)?`saml-sso`:`network`:n===422&&(r?.errors?.some(e=>e.field===`name`)||a.includes(`already exists`)||a.includes(`name already exists`))?`name-conflict`:`network`}async function Wf(e){let{octokit:t,ownerLogin:n,ownerKind:r,name:i,visibility:a,description:o}=e,s=a===`private`;if(r===`user`){let{data:e}=await t.repos.createForAuthenticatedUser({name:i,private:s,...o?{description:o}:{}});return{cloneUrl:e.clone_url,defaultBranch:e.default_branch??`main`}}let{data:c}=await t.repos.createInOrg({org:n,name:i,visibility:a,...o?{description:o}:{}});return{cloneUrl:c.clone_url,defaultBranch:c.default_branch??`main`}}async function Gf(e,t,n){try{let{data:r}=await e.repos.get({owner:t,repo:n});return{cloneUrl:r.clone_url,defaultBranch:r.default_branch??`main`}}catch{return null}}async function Kf(e,t){return(await e.users.getAuthenticated()).data.login.toLowerCase()===t.toLowerCase()?`user`:`org`}function qf(e){return
|
|
91
|
-
`),process.exit(1)),await Qf(t,await e())})}function ep(){let e=new
|
|
92
|
-
`)}\n`)})}function sp(e){switch(e){case`shared`:return
|
|
93
|
-
`),o(h)),await new Promise(()=>{})}function vp(){let e=new
|
|
89
|
+
`);return}if(a){process.stdout.write(`${JSON.stringify({type:`error`,code:c.kind})}\n`);return}process.stderr.write(`✗ share name-check failed: ${c.kind}\n`),process.exit(1)}function zf(e){return new D(`name-check`).description(`Check if owner/name is available on GitHub`).requiredOption(`--owner <owner>`,`GitHub owner (user or org)`).requiredOption(`--name <name>`,`Repository name`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await Rf(t,await e())})}async function Bf(e){try{let t=[],n=await e.users.getAuthenticated();t.push({login:n.data.login,kind:`user`,avatarUrl:n.data.avatar_url});for await(let n of e.paginate.iterator(e.orgs.listMembershipsForAuthenticatedUser,{state:`active`,per_page:100}))for(let e of n.data)(e.permissions?.can_create_repository===!0||e.role===`admin`)&&t.push({login:e.organization.login,kind:`org`,avatarUrl:e.organization.avatar_url??void 0});return{kind:`ok`,owners:t}}catch(e){return e.status===401?{kind:`auth-required`}:{kind:`network`}}}async function Vf(e,t){let{host:n,json:r}=e;W(n);let i=await qa(n,t);if(i==null){if(r){process.stdout.write(`${JSON.stringify({type:`error`,code:`auth-required`})}\n`);return}process.stderr.write(`Not logged in to ${n}\n`),process.exit(1)}let a=n===`github.com`?void 0:`https://${n}/api/v3`,o=await Bf(new K({auth:i,...a?{baseUrl:a}:{}}));if(o.kind===`ok`){if(r)process.stdout.write(`${JSON.stringify({type:`owners`,owners:o.owners})}\n`);else for(let e of o.owners)process.stdout.write(`${e.kind}\t${e.login}\n`);return}if(r){process.stdout.write(`${JSON.stringify({type:`error`,code:o.kind})}\n`);return}process.stderr.write(`✗ share owners failed: ${o.kind}\n`),process.exit(1)}function Hf(e){return new D(`owners`).description(`List GitHub owners eligible to host a new repository`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{await Vf(t,await e())})}function Uf(e){let t=e,n=t.status,r=t.response?.data,i=t.response?.headers,a=`${r?.message??r?.errors?.map(e=>e.message??``).join(`
|
|
90
|
+
`)??``}\n${t.message??``}`.toLowerCase();return n===401?`auth-required`:n===403?i?.[`x-github-sso`]||a.includes(`saml`)||a.includes(`sso`)?`saml-sso`:`network`:n===422&&(r?.errors?.some(e=>e.field===`name`)||a.includes(`already exists`)||a.includes(`name already exists`))?`name-conflict`:`network`}async function Wf(e){let{octokit:t,ownerLogin:n,ownerKind:r,name:i,visibility:a,description:o}=e,s=a===`private`;if(r===`user`){let{data:e}=await t.repos.createForAuthenticatedUser({name:i,private:s,...o?{description:o}:{}});return{cloneUrl:e.clone_url,defaultBranch:e.default_branch??`main`}}let{data:c}=await t.repos.createInOrg({org:n,name:i,visibility:a,...o?{description:o}:{}});return{cloneUrl:c.clone_url,defaultBranch:c.default_branch??`main`}}async function Gf(e,t,n){try{let{data:r}=await e.repos.get({owner:t,repo:n});return{cloneUrl:r.clone_url,defaultBranch:r.default_branch??`main`}}catch{return null}}async function Kf(e,t){return(await e.users.getAuthenticated()).data.login.toLowerCase()===t.toLowerCase()?`user`:`org`}function qf(e){return yt(bo(e,[])).env(mo())}function Jf(e,t){if(!e.startsWith(`https://`))return e;try{if(new URL(e).hostname!==`github.com`)return e}catch{return e}return e.replace(`https://`,`https://x-access-token:${t}@`)}const Yf={ensureOkScaffold:e=>{rn(e)},gitFactory:qf};async function Xf(e){let t={...Yf,...e.deps},n=L(e.projectDir),r;if(e.ownerKind)r=e.ownerKind;else try{r=await Kf(e.octokit,e.body.owner)}catch(e){return{kind:`error`,code:Uf(e)}}try{t.ensureOkScaffold(n)}catch{return{kind:`error`,code:`init-failed`}}let i=t.gitFactory(n),a=F(n,`.git`);if(!R(a))try{await i.init()}catch{return{kind:`error`,code:`init-failed`}}let o;try{o=await Wf({octokit:e.octokit,ownerLogin:e.body.owner,ownerKind:r,name:e.body.name,visibility:e.body.visibility,description:e.body.description})}catch(t){if(Uf(t)===`name-conflict`){let t=await Gf(e.octokit,e.body.owner,e.body.name);if(t===null)return{kind:`error`,code:`name-conflict`};o=t}else return{kind:`error`,code:Uf(t)}}try{await i.addRemote(`origin`,o.cloneUrl)}catch(e){if(!String(e.message??``).toLowerCase().includes(`remote origin already exists`))return{kind:`error`,code:`push-failed`}}let s=!1;try{await i.raw([`rev-parse`,`--verify`,`HEAD`])}catch{s=!0}if(s)try{await i.add(`.`),await i.raw([`commit`,`--allow-empty`,`-m`,`Initial commit`])}catch{return{kind:`error`,code:`init-failed`}}let c=Jf(o.cloneUrl,e.token);try{await i.raw([`push`,c,`HEAD:refs/heads/${o.defaultBranch}`])}catch(e){let t=String(e.message??``).toLowerCase();return t.includes(`saml`)||t.includes(`sso`)?{kind:`error`,code:`saml-sso`}:{kind:`error`,code:`push-failed`}}try{await i.raw([`update-ref`,`refs/remotes/origin/${o.defaultBranch}`,`HEAD`])}catch{}return{kind:`ok`,value:{ownerLogin:e.body.owner,repoName:e.body.name,cloneUrl:o.cloneUrl,defaultBranch:o.defaultBranch}}}function Zf(e,t){if(!e){t.kind===`ok`?process.stdout.write(`✓ Published ${t.value.cloneUrl}\n`):(process.stderr.write(`✗ share publish failed: ${t.code}\n`),process.exit(1));return}if(t.kind===`ok`){process.stdout.write(`${JSON.stringify({type:`publish`,...t.value})}\n`);return}process.stdout.write(`${JSON.stringify({type:`error`,code:t.code})}\n`)}async function Qf(e,t){let{host:n,owner:r,name:i,visibility:a,description:o,projectDir:s,json:c}=e;if(W(n),Rt(s)){process.stderr.write(`${new je(L(s)).message}\n`),process.exitCode=64;return}let l=await qa(n,t);if(l==null){Zf(c,{kind:`error`,code:`auth-required`});return}let u=n===`github.com`?void 0:`https://${n}/api/v3`,d=new K({auth:l,...u?{baseUrl:u}:{}});try{Pr(`git config user.email`,T({cwd:s,stdio:`ignore`}))}catch{process.env.GIT_AUTHOR_NAME??=`OpenKnowledge`,process.env.GIT_AUTHOR_EMAIL??=`noreply@inkeep.com`,process.env.GIT_COMMITTER_NAME??=`OpenKnowledge`,process.env.GIT_COMMITTER_EMAIL??=`noreply@inkeep.com`}Zf(c,await Xf({octokit:d,token:l,projectDir:s,body:{owner:r,name:i,visibility:a,description:o}}))}function $f(e){return new D(`publish`).description(`Publish a no-remote project to GitHub`).requiredOption(`--owner <owner>`,`GitHub owner (user or org)`).requiredOption(`--name <name>`,`Repository name`).requiredOption(`--visibility <visibility>`,`public or private`).option(`--description <description>`,`Repository description`).requiredOption(`--project-dir <projectDir>`,`Path to the project on disk`).option(`--host <host>`,`GitHub or GitHub Enterprise hostname`,`github.com`).option(`--json`,`Output JSON`,!1).action(async t=>{t.visibility!==`public`&&t.visibility!==`private`&&(process.stderr.write(`✗ visibility must be 'public' or 'private'
|
|
91
|
+
`),process.exit(1)),await Qf(t,await e())})}function ep(){let e=new D(`share`);e.description(`Sharing flow operations (owners, name-check, publish)`);let t=()=>Rn();return e.addCommand(Hf(t)),e.addCommand(zf(t)),e.addCommand($f(t)),e}function tp(e){if(e.length!==0){process.stderr.write(` Cleared ${e.length} stale entry(s) left by an older version:\n`);for(let t of e)process.stderr.write(` ${t}\n`)}}function np(){return new D(`unshare`).description(`Switch this project to local-only mode (add OK artifacts to .git/info/exclude so they stay out of git)`).option(`--project <dir>`,`Project root (defaults to cwd)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=L(e.project??process.cwd()),n=Sn(t),r=Ln(t,n);if(r.kind===`refused-tracked`){if(e.json){let e={type:`sharing-unshare`,projectRoot:t,mode:`refused-tracked`,tracked:r.tracked,remediation:r.remediation};process.stdout.write(`${JSON.stringify(e)}\n`)}else process.stderr.write(`${r.remediation}\n`);process.exitCode=1;return}if(r.kind===`no-exclude`){rp(e.json,t,r.reason);return}let i=gn(t);if(e.json){let e={type:`sharing-unshare`,projectRoot:t,mode:i,appended:r.appended,alreadyPresent:r.alreadyPresent,removed:r.removed};process.stdout.write(`${JSON.stringify(e)}\n`);return}if(r.appended.length===0){if(r.removed.length>0){process.stderr.write(`${A(`✓`)} ${N(`Sharing mode is already`)} ${A(`local-only`)}${N(`.`)}\n`),tp(r.removed);return}process.stderr.write(`${N(`Sharing mode is already`)} ${A(`local-only`)} ${N(`— nothing to do.`)}\n`);return}process.stderr.write(`${A(`✓`)} ${N(`Sharing mode set to`)} ${A(`local-only`)}\n`),process.stderr.write(` Added ${r.appended.length} path(s) to ${N(`.git/info/exclude`)} (per-clone, not committed).\n`),tp(r.removed)})}function rp(e,t,n){if(e){process.stdout.write(`${JSON.stringify({type:`sharing-unshare`,projectRoot:t,mode:`no-git`,appended:[],alreadyPresent:[],reason:n})}\n`);return}process.stderr.write(`${M({"no-git":`No git repository here — sharing mode does not apply.`,"no-info-dir":`The gitdir's info/ folder is absent; cannot toggle sharing mode.`,"malformed-pointer":"The .git pointer file is malformed (stale worktree). Run `git worktree prune` and try again.",inaccessible:`The .git path is inaccessible (permissions or mount issue).`}[n])}\n`)}function ip(){return new D(`share`).description(`Switch this project to shared mode (commit OK config alongside content)`).option(`--project <dir>`,`Project root (defaults to cwd)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=L(e.project??process.cwd()),n=gn(t),r=Sn(t),i=vn(t,r);if(i.kind===`no-exclude`){ap(e.json,t,i.reason);return}let a=gn(t);if(e.json){let e={type:`sharing-share`,projectRoot:t,mode:a,removed:i.removed};process.stdout.write(`${JSON.stringify(e)}\n`);return}if(n===`shared`){if(i.removed.length>0){process.stderr.write(`${A(`✓`)} ${O(`Sharing mode is already`)} ${N(`shared`)}${O(`.`)}\n`),tp(i.removed);return}process.stderr.write(`${O(`Sharing mode is already`)} ${N(`shared`)} ${O(`— nothing to do.`)}\n`);return}process.stderr.write(`${A(`✓`)} ${N(`Sharing mode set to`)} ${A(`shared`)}\n`),process.stderr.write(` Removed OK paths from ${N(`.git/info/exclude`)}; commit the files to share with teammates.\n`)})}function ap(e,t,n){if(e){process.stdout.write(`${JSON.stringify({type:`sharing-share`,projectRoot:t,mode:`no-git`,removed:[],reason:n})}\n`);return}process.stderr.write(`${M({"no-git":`No git repository here — sharing mode does not apply.`,"no-info-dir":`The gitdir's info/ folder is absent; cannot toggle sharing mode.`,"malformed-pointer":"The .git pointer file is malformed (stale worktree). Run `git worktree prune` and try again.",inaccessible:`The .git path is inaccessible (permissions or mount issue).`}[n])}\n`)}function op(){return new D(`status`).description(`Print the current sharing mode and the OK paths in .git/info/exclude`).option(`--project <dir>`,`Project root (defaults to cwd)`).option(`--json`,`Output JSON`,!1).action(async e=>{let t=L(e.project??process.cwd()),n=gn(t),r=[...Cn(t)],i=wn(t,Sn(t)).tracked;if(e.json){let e={type:`sharing-status`,projectRoot:t,mode:n,excluded:r,trackedUpstream:i};process.stdout.write(`${JSON.stringify(e)}\n`);return}let a=[];if(a.push(`OpenKnowledge sharing mode: ${sp(n)}`),a.push(``),a.push(`Excluded from git via ${N(`.git/info/exclude`)}:`),r.length===0)a.push(` (none)`);else for(let e of r)a.push(` ${e}`);if(a.push(``),a.push(`Other OK paths exist but are tracked upstream:`),i.length===0)a.push(` (none)`);else for(let e of i)a.push(` ${e}`);a.push(``),a.push(`Toggle with: ${O(n===`local-only`?`ok config-sharing share`:`ok config-sharing unshare`)}`),process.stdout.write(`${a.join(`
|
|
92
|
+
`)}\n`)})}function sp(e){switch(e){case`shared`:return A(`shared`);case`local-only`:return A(`local-only`);case`no-git`:return M(`no-git (not a git repository)`)}}function cp(){let e=new D(`config-sharing`);return e.description(`Manage OpenKnowledge's git-sharing mode (share OK config with the team, or keep local-only on this machine)`),e.addCommand(ip()),e.addCommand(np()),e.addCommand(op()),e}const lp=new Set([`--cwd`,`--log-level`,`--project`,`--scope`]);function up(e){let t=[],n=null,r=null,i=!1;for(let a=0;a<e.length;a++){let o=e[a];if(o===`--help`||o===`-h`||o===`--version`||o===`-V`){i=!0;break}if(lp.has(o)){let t=e[a+1]??null;o===`--cwd`&&(n=t),o===`--project`&&(r=t),a++;continue}if(o.startsWith(`--cwd=`)){n=o.slice(6);continue}if(o.startsWith(`--project=`)){r=o.slice(10);continue}o.startsWith(`-`)||t.push(o)}return{operands:t,cwd:n,project:r,sawTerminalFlag:i}}function dp(e,t){if(e.length===0)return null;let n=e[0];return n===`open`&&e[1]!==void 0&&t.isFileish(e[1])?e[1]:t.knownSubcommands.has(n)?null:t.isFileish(n)?n:null}function fp(e){return/\.(md|mdx)$/i.test(e)}function pp(e,t){if(fp(t))return!0;try{return V(e).isFile()}catch(t){let n=t?.code;return n!==`ENOENT`&&n!==`ENOTDIR`&&process.stderr.write(`[ok] statSync failed for ${e} (${n??`unknown`}); treating as non-fileish\n`),!1}}function mp(e,t){let n=up(e);if(n.sawTerminalFlag)return null;let r=n.cwd?t.resolvePath(t.cwd,n.cwd):t.cwd,i=dp(n.operands,{knownSubcommands:t.knownSubcommands,isFileish:e=>t.isFileish(t.resolvePath(r,e),e)});return i===null?null:{absPath:t.resolvePath(r,i),projectRoot:n.project===null?null:t.resolvePath(r,n.project)}}function hp(e=()=>Bn(Kn())){return{prepare:Vt,detectBundlePath:()=>e().bundlePath??null,openTarget:$d,runProjectOpen:(e,t)=>of(e,{project:t},tf()),runBrowserOpen:e=>_p(e),log:e=>process.stdout.write(`${e}\n`),error:e=>process.stderr.write(`${e}\n`)}}async function gp(e,t,n={}){let r;try{r=t.prepare(e,{projectRoot:n.projectRoot})}catch(e){if(e instanceof an||e instanceof mt||e instanceof ln||e instanceof bt)return t.error(e.message),1;throw e}if(r.mode===`project`)return await t.runProjectOpen(r.docName,r.projectRoot);let i=t.detectBundlePath();if(i){let e=`openknowledge://open?file=${encodeURIComponent(r.canonicalFilePath)}`,n=await t.openTarget(e,{desktopBundlePath:i});return n.ok?(t.log(`Opening ${r.singleDocRelPath} in the OpenKnowledge desktop app.`),0):(t.error(`Could not open the OpenKnowledge desktop app: ${ef(n.reason,e)}.`),1)}return await t.runBrowserOpen(r),0}async function _p(e){let{createEphemeralProjectDir:t}=await import(`./dist-s4KdL8xn.mjs`),{loadConfig:n}=await import(`./src-CLGfVFCQ.mjs`),{bootStartServer:r,resolveBundledReactShellDir:i,resolveHost:a}=await import(`./start-aC_vE1aA.mjs`),{openBrowser:o}=await import(`./open-browser-B9QXUTKM.mjs`),s=i();s||(process.stderr.write("OpenKnowledge UI assets were not found. Reinstall @inkeep/open-knowledge, or build the app (`bun run build`) in a monorepo checkout.\n"),process.exit(1));let c=t(e.contentDir),l=!1,u,d=async()=>{if(!l){l=!0;try{await u?.destroy(`external-signal`)}catch{}try{await ii(c,{recursive:!0,force:!0})}catch{}}},f=()=>{d().then(()=>process.exit(0))};process.once(`SIGINT`,f),process.once(`SIGTERM`,f);let{config:p}=n(c),m=a({},process.env);try{u=await r({config:p,cwd:c,host:m,port:0,projectDir:c,singleFile:e.canonicalFilePath,serveContentAssets:!0,reactShellDistDir:s,idleThresholdMs:6e5})}catch(t){await d(),process.stderr.write(`Failed to open ${e.singleDocRelPath}: ${t instanceof Error?t.message:String(t)}\n`),process.exit(1)}let h=`http://${m}:${u.port}/#/${$e(e.docName)}`;process.env.OK_SINGLE_FILE_NO_OPEN===`1`?process.stdout.write(`Serving ${e.singleDocRelPath} (headless) at: ${h}\n`):(process.stdout.write(`Opening ${e.singleDocRelPath} in your browser: ${h}\n`),process.stdout.write(`Press Ctrl-C to close the session.
|
|
93
|
+
`),o(h)),await new Promise(()=>{})}function vp(){let e=new D(`skills`).description(`Manage Open Knowledge skills for this project.`);return e.command(`installed`).description(`List every skill installed across all your agents (read-only).`).option(`--json`,`Emit the raw enumeration as JSON.`).action(e=>{let t=L(process.cwd()),r=Ft(lt(t)?.rootPath??t),i=cn({projectDir:r}),a={...i,skills:i.skills.filter(e=>n(e.provenance,r))};if(e.json){process.stdout.write(`${JSON.stringify(a,null,2)}\n`);return}if(a.skills.length===0){process.stdout.write(`${k(`No installed skills found across any agent.`)}\n`);return}process.stdout.write(`${N(`${a.skills.length} installed skill(s):`)}\n`);for(let e of a.skills){let t=e.provenance.version?k(` v${e.provenance.version}`):``,n=[e.inert.commands&&`commands`,e.inert.hooks&&`hooks`,e.inert.mcp&&`mcp`].filter(Boolean),r=n.length>0?k(` [${n.join(`, `)}]`):``;process.stdout.write(` ${A(e.name)}${t} ${k(e.sourceHarnesses.join(`, `))}${r}\n`)}process.stdout.write(`\n${N(`${a.packs.length} pack(s):`)}\n`);for(let e of a.packs)process.stdout.write(` ${O(e.name)} ${k(`v${e.version}`)} — ${e.skills.length} skill(s)\n`)}),e.command(`import <source>`).description(`Import a skill into this project as versioned content (github owner/repo, a git URL, or a local path).`).option(`--skill <name>`,`Pick one skill from a multi-skill source.`).option(`--scope <scope>`,`project (default) or global.`,`project`).action(async(e,t)=>{let n=E(process.cwd()),r=mr(n,`server`);if(r.status!==`alive`){process.stderr.write(`${j(`Error:`)} no running Open Knowledge server for this project. Start it with ${N(`ok start`)} and retry.\n`),process.exitCode=1;return}let i;try{i=await fetch(`http://127.0.0.1:${r.lock.port}/api/skill/import`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({source:e,...t.skill?{skill:t.skill}:{},scope:t.scope===`global`?`global`:`project`})})}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`${j(`Error:`)} could not reach the server: ${t}\n`),process.exitCode=1;return}let a=await i.json().catch(()=>({}));if(!i.ok){let e=a.detail??a.title??`HTTP ${i.status}`;process.stderr.write(`${j(`Import failed:`)} ${e}\n`),process.exitCode=1;return}let o=a.name;if(a.alreadyImported){process.stdout.write(`${O(`Already imported:`)} ${N(o)} (identical content).\n`);return}let s=a.provenance??{},c=a.collisionRenamedFrom;process.stdout.write(`${A(`Imported`)} ${N(o)}${c?k(` (renamed from ${c} — name was taken)`):``} from ${k(s.source??e)}${s.publisher?k(` · ${s.publisher}`):``}.\n${k(`Saved as versioned content in this project's skill home. Scripts shown, never run. Use the skill's install menu (or the install MCP verb) to add it to your other editors.`)}\n`);for(let e of a.warnings??[])process.stdout.write(` ${k(`! ${e}`)}\n`)}),e}function yp(e){return{server:bp(`server`,e),ui:e.status===`alive`&&pt(e.lock)?{name:`ui`,state:`alive`,pid:e.lock.pid,port:e.lock.port,startedAt:e.lock.startedAt,host:e.lock.hostname,alive:!0,servedByServer:!0}:{name:`ui`,state:`missing`,alive:!1}}}function bp(e,t){switch(t.status){case`missing`:return{name:e,state:`missing`,alive:!1};case`corrupt`:return{name:e,state:`corrupt`,alive:!1};case`foreign-host`:return{name:e,state:`foreign-host`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:`unknown`};case`dead-pid`:return{name:e,state:`dead-pid`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:!1};case`alive`:return{name:e,state:`alive`,pid:t.lock.pid,port:t.lock.port,startedAt:t.lock.startedAt,host:t.lock.hostname,alive:!0}}}function xp(e){return`${Sp(e.server)}\n${Sp(e.ui)}`}function Sp(e){let t=e.name===`server`?`server`:`ui `;return e.state===`missing`?`${t} not running`:e.state===`corrupt`?`${t} lock file corrupt — run \`ok clean\``:e.state===`foreign-host`?`${t} foreign host (${e.host}) pid=${e.pid} port=${e.port}`:e.state===`dead-pid`?`${t} stale (dead pid=${e.pid}) — run \`ok clean\``:e.servedByServer===!0?`${t} served by server pid=${e.pid} port=${e.port}`:`${t} alive pid=${e.pid} port=${e.port} started=${e.startedAt}`}function Cp(e){let t=e.inspect??(()=>mr(e.lockDir,`server`)),n=e.log??(e=>console.log(e)),r=yp(t());return e.json?n(JSON.stringify(r,null,2)):n(xp(r)),r}function wp(e){return new D(`status`).description(`Show whether the server and UI are running for this project`).option(`--json`,`Emit structured JSON instead of formatted text`).action(t=>{e(),Cp({lockDir:E(process.cwd()),json:t.json===!0})})}function Tp(e){if(e.yes===!0||e.json===!0)return!1;let t=e.stdinIsTTY??process.stdin.isTTY,n=e.stdoutIsTTY??process.stdout.isTTY;return t===!0&&n===!0}async function Ep(e,t){let n=ci({input:e.input,output:e.output});try{return(await n.question(t)).trim()}finally{n.close()}}async function Dp(e={}){let t={input:e.input??process.stdin,output:e.output??process.stderr};t.output.write(k(`
|
|
94
94
|
What you share is sent to the OpenKnowledge team.
|
|
95
|
-
`));let n=await
|
|
96
|
-
`)}function Np(e){return
|
|
95
|
+
`));let n=await mn({message:`Before you go, mind sharing why? (optional)`,default:null,pageSize:ne.length+1,choices:[...ne.map(e=>({name:e.label,value:e.value})),{name:`Skip, I'd rather not say`,value:null}]},t);if(n===null)return{};let r=await Ep(t,k(`Anything else we should know? (optional) `)),i=await Ep(t,k(`Email, if we may follow up (optional) `));return{reason:n,note:r||void 0,email:i||void 0}}async function Op(e){if(!Tp(e))return`not-prompted`;let t;try{t=await(e.collect??(()=>Dp(e)))()}catch{return`failed`}return i(t)?((e.output??process.stderr).write(`\n${N(`Thank you. We read every response.`)}\n\n`),(await(e.submit??le)({...t,source:`cli_uninstall`,appVersion:e.appVersion,platform:e.platform})).ok?`submitted`:`undelivered`):`skipped`}function kp(e,t,n=Ap,r=R,i={}){let a=[],o=i.platform??process.platform,s=i.env??process.env;if(o===`darwin`)for(let t of[`/Applications/OpenKnowledge.app`,F(e,`Applications`,`OpenKnowledge.app`)])r(t)&&a.push({method:`app`,label:`OK Desktop (${t})`,instruction:`Move ${t} to the Trash (or: rm -rf "${t}")`});else if(o===`win32`){let e=s.LOCALAPPDATA;if(e)for(let t of[`@inkeepopen-knowledge-desktop`,`OpenKnowledge`]){let n=F(e,`Programs`,t,`OpenKnowledge.exe`);if(r(n)){a.push({method:`app`,label:`OK Desktop (${n})`,instruction:`Uninstall from Windows Settings → Apps → Installed apps → OpenKnowledge`});break}}}else o===`linux`&&r(`/opt/OpenKnowledge/openknowledge`)&&a.push({method:`app`,label:`OK Desktop (/opt/OpenKnowledge)`,instruction:`Remove with your package manager: sudo apt remove openknowledge (Debian/Ubuntu) or sudo dnf remove OpenKnowledge (Fedora/RHEL)`});return n([`ls`,`-g`,`--depth=0`,`@inkeep/open-knowledge`])?.includes(`@inkeep/open-knowledge@`)&&a.push({method:`npm-global`,label:`npm global install`,instruction:`npm uninstall -g @inkeep/open-knowledge`}),t&&/[/\\]_npx[/\\]/.test(t)&&a.push({method:`npx`,label:`npx (ephemeral)`,instruction:`Nothing to uninstall — npx runs from a temporary cache. (Optional: npm cache clean --force)`}),a}function Ap(e){try{return Nr(`npm`,e,T({encoding:`utf-8`,timeout:5e3,stdio:[`ignore`,`pipe`,`ignore`]}))}catch{return null}}const jp=`━`.repeat(64);function Mp(e,t=process.platform){let n=[M(jp),N(` One more step — remove the OpenKnowledge app itself`),k(` (OpenKnowledge can't delete its own running binary — do this by hand.)`),``];if(e.length===0){let e=t===`win32`?`uninstall from Settings → Apps → Installed apps → OpenKnowledge`:t===`linux`?`remove the openknowledge package with your package manager (apt / dnf)`:`move /Applications/OpenKnowledge.app to the Trash`;n.push(k(` Install method not detected. If you installed it, remove it via:`)),n.push(` ${O(`OK Desktop`)} — ${e}`),n.push(` ${O(`npm global`)} — npm uninstall -g @inkeep/open-knowledge`),n.push(` ${O(`npx`)} — nothing to remove (runs from a temporary cache)`)}else for(let t of e)n.push(` ${O(t.label)}`),n.push(` ${t.instruction}`);return n.push(M(jp)),n.join(`
|
|
96
|
+
`)}function Np(e){return L(e,`..`,`..`)}function Pp(e){return R(F(e,`.ok`))}async function Fp(e){let t=e.findRoot??lt,n=e.readRecents??_r,r=t(e.cwd)?.rootPath??null,i=er({home:e.home,platformName:e.platform,env:e.env}),a=new Set;for(let e of n(i))a.add(L(e.path));let o=new Set(e.lockDirs.map(Np));for(let e of o)a.add(e);r&&a.delete(r);let s=[];r&&Pp(r)&&s.push({path:r,running:o.has(r),current:!0});for(let e of a)Pp(e)&&s.push({path:e,running:o.has(e),current:!1});return s.length===0?[]:e.allProjects?s.map(e=>e.path):e.yes||e.dryRun||!(e.isTTY??process.stdout.isTTY)?[]:(e.promptFn??Ip)(s)}async function Ip(e){return pn({message:`Also remove OpenKnowledge from these projects? (space to toggle; none selected by default)
|
|
97
97
|
Removes each project's .ok/ config, editor MCP entries, and OK edit-history
|
|
98
98
|
(.git/ok/). Your markdown content is kept — \`ok start\` re-adds OK later.
|
|
99
|
-
`,required:!1,theme:{icon:{checked:`[x]`,unchecked:`[ ]`}},choices:e.map(e=>({name:`${e.path}${e.current?` (current)`:``}${e.running?` (running — will be stopped)`:``}`,value:e.path,checked:!1}))})}const Lp=
|
|
100
|
-
`)}`:``,m=
|
|
101
|
-
`),exitCode:0};if(e.json&&!e.yes)return{status:`failed`,message:`${
|
|
102
|
-
`),exitCode:+(g.failed.length>0),runFeedbackAfterReport:_}}function zp(){return new
|
|
103
|
-
`)}process.argv.includes(`--no-color`)?(process.env.NO_COLOR=`1`,delete process.env.FORCE_COLOR):process.argv.includes(`--color`)&&(process.env.FORCE_COLOR=`1`,delete process.env.NO_COLOR),
|
|
99
|
+
`,required:!1,theme:{icon:{checked:`[x]`,unchecked:`[ ]`}},choices:e.map(e=>({name:`${e.path}${e.current?` (current)`:``}${e.running?` (running — will be stopped)`:``}`,value:e.path,checked:!1}))})}const Lp=k(`The openknowledge:// URL scheme deregisters itself once the app is removed — no action needed.`);async function Rp(e={}){let t=e.home??U(),n=e.platform??process.platform,r=e.env??process.env,i=L(e.cwd??process.cwd()),a=e.host??`github.com`,o=e.purgeContent??!1,s=e.deps?.discoverLockDirs??Ve,c=e.deps?.resolveRecentProjects??Fp,l=e.deps?.detectInstallMethods??kp,u=await s(),d=hs({home:t,platform:n,env:r,host:a,lockDirs:u,marker:ss(t),recentDeinitProjectRoots:await c({home:t,platform:n,env:r,cwd:i,lockDirs:u,yes:e.yes,allProjects:e.allProjects,dryRun:e.dryRun,isTTY:e.isTTY}),purgeContent:o}),f=await bs(d,e.deps?.probeClients),p=f.length>0?`\n\n${f.map(e=>M(e)).join(`
|
|
100
|
+
`)}`:``,m=k("Individual projects are only removed when you select them (or pass --all-projects). To remove OpenKnowledge from one project, run `ok deinit` inside it."),h=()=>Mp(l(t,e.argv1??process.argv[1],void 0,void 0,{platform:n,env:r}),n);if(e.dryRun)return{status:`dry-run`,message:e.json?JSON.stringify(ks(d,f),null,2):[N(`Would remove (dry-run — no changes made):`),``,`${Es(d)}${p}`,``,m,``,h()].join(`
|
|
101
|
+
`),exitCode:0};if(e.json&&!e.yes)return{status:`failed`,message:`${j(`Error:`)} --json requires --yes (or --dry-run) so there is no interactive prompt.`,exitCode:1};if(!e.yes){if(!(e.isTTY??process.stdout.isTTY))return{status:`cancelled`,message:`${j(`Aborted:`)} refusing to uninstall non-interactively without --yes.`,exitCode:1};if(process.stderr.write(`${N(`This will remove OpenKnowledge from your machine:`)}\n\n${Es(d)}${p}\n\n${M(`This cannot be undone.`)}\n\n`),!await rs(`${N(`Remove all of the above?`)} ${k(`[y/N] `)}`,e.confirmStream))return{status:`cancelled`,message:k(`Cancelled. Nothing was removed.`),exitCode:0}}let g=await ys(d,{env:e.env??(e.home===void 0?process.env:{}),...e.deps?.runRemovalDeps}),_=g.failed.length===0?async()=>{await Op({stdinIsTTY:e.isStdinTTY,stdoutIsTTY:e.isTTY,yes:e.yes,json:e.json,appVersion:Er,platform:n,...e.deps?.feedback})}:void 0,v=[e.json?JSON.stringify(As(`uninstall`,g,f),null,2):Os(g)];return e.json||(v.push(``,m,Lp),g.failed.length===0&&v.push(``,A(`OpenKnowledge's files have been removed from this machine.`)),v.push(``,h())),{status:g.failed.length>0?`failed`:`done`,message:v.join(`
|
|
102
|
+
`),exitCode:+(g.failed.length>0),runFeedbackAfterReport:_}}function zp(){return new D(`uninstall`).description(`Remove OpenKnowledge from your machine — credentials, PATH entries, editor MCP configs, skill bundles, app data, and ~/.ok. Keeps your markdown content and your authored skills (~/.ok/skills) unless --purge-content. Detects the app install and prints how to remove it; never self-deletes.`).option(`-y, --yes`,`Skip the confirmation prompt (removes the global footprint only; add --all-projects to also deinit projects)`).option(`--dry-run`,`Print the removal plan and exit without changing anything`).option(`--json`,`Emit a machine-readable plan/outcome (requires --yes or --dry-run)`).option(`--purge-content`,`Also remove user-authored content (~/.ok/skills)`).option(`--all-projects`,`Also deinit every recent/running project (by default no project is removed — you pick them interactively)`).action(async e=>{let t=await Rp({yes:e.yes,dryRun:e.dryRun,json:e.json,purgeContent:e.purgeContent,allProjects:e.allProjects});process.stdout.write(`${t.message}\n`),await t.runFeedbackAfterReport?.(),t.exitCode!==0&&(process.exitCode=t.exitCode)})}function Bp(e){return[e,`Copyright (C) 2026 Inkeep, Inc.`,`License GPL-3.0-or-later: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.`,`This is free software: you are free to change and redistribute it.`,`There is NO WARRANTY, to the extent permitted by law.`].join(`
|
|
103
|
+
`)}process.argv.includes(`--no-color`)?(process.env.NO_COLOR=`1`,delete process.env.FORCE_COLOR):process.argv.includes(`--color`)&&(process.env.FORCE_COLOR=`1`,delete process.env.NO_COLOR),ot();const Q=new D;let $;Q.name(`open-knowledge`).description(`Local-first knowledge base with CRDT collaboration`).usage(`[options] [file | command]`).version(Bp(Er)).option(`--cwd <path>`,`Working directory`).option(`--log-level <level>`,`Log level: silent, error, warn, info (default), debug, trace`,`info`).option(`--no-color`,`Disable color output`).option(`--color`,`Force color output`).hook(`preAction`,e=>{let t=e.opts().cwd;if(t!==void 0&&process.chdir(t),Q.getOptionValueSource(`logLevel`)===`cli`){let e=String(Q.opts().logLevel);process.env.LOG_LEVEL=e,process.env.OK_CONSOLE_LEVEL=e}let n=e.args?.[0],r=Zn(n,process.cwd());r!==null&&(gr(process.cwd()),process.chdir(r),console.error(`[ok] Using OpenKnowledge project at ${r}`));let i;try{let e=Or(r??t);if(i=e.config,qo(n))for(let t of e.diagnostics)t.code===`REMOVED_KEY`&&console.error(`[ok] ${v(t)}`);for(let t of e.ignoredCommittedKeys)console.error(`[ok] ${me(t)}`)}catch(e){if(n===`uninstall`||n===`deinit`)console.error(`[ok] project config could not be loaded; ${n} will use defaults: ${e instanceof Error?e.message:String(e)}`),i=vt.parse({});else throw e}$=i;let a=e.args?.[0]??e.name()??`cli`;qn({command:a,cwd:process.cwd(),configuredProjectName:i.project?.name??void 0})}),Q.action(async()=>{let e=Bn(Kn());if(e.available){Vn({spawn:Fr},e);return}await Tr($,{})});const Vp=wr(()=>$);Q.addCommand(Vp);const Hp=Qu(()=>$);Q.addCommand(Hp),Q.addCommand(In()),Q.addCommand(If()),Q.addCommand(Zd()),Q.addCommand(ns(),{hidden:!0}),Q.addCommand(Of()),Q.addCommand(vp());const Up=cf(()=>$);Q.addCommand(Up),Q.addCommand(gi(()=>$)),Q.addCommand(Si(()=>$));const Wp=new D(`ui`).description("Removed: the editor UI is served by `ok start`").allowUnknownOption().allowExcessArguments().argument(`[args...]`).action(()=>{console.error("`ok ui` was removed — the editor UI is served by the project server. Run `ok start` instead."),process.exit(1)});Q.addCommand(Wp,{hidden:!0}),Q.addCommand(sf()),Q.addCommand(dr(()=>$)),Q.addCommand(so(()=>$)),Q.addCommand(wp(()=>$)),Q.addCommand(Ms()),Q.addCommand(zp()),Q.addCommand(ar()),Q.addCommand(vc()),Q.addCommand(io()),Q.addCommand(Jo()),Q.addCommand(no(zn)),Q.addCommand(Mc()),Q.addCommand(Fo(()=>$)),Q.addCommand(df(()=>$)),Q.addCommand(pf(()=>$)),Q.addCommand(ff(()=>$)),Q.addCommand(ep()),Q.addCommand(cp()),Q.addHelpText(`after`,`
|
|
104
104
|
Examples:
|
|
105
105
|
ok Launch the desktop app (or start a local server if it isn't installed)
|
|
106
106
|
ok notes.md Open a single markdown file in the editor
|
|
107
107
|
ok ./specs/foo/SPEC.md Open a file inside a project, focused on that doc
|
|
108
|
-
ok open ./start.md Open a file whose name collides with a subcommand`);{let e=mp(process.argv.slice(2),{knownSubcommands:new Set(Q.commands.map(e=>e.name())),cwd:process.cwd(),isFileish:pp,resolvePath:(e,t)=>
|
|
108
|
+
ok open ./start.md Open a file whose name collides with a subcommand`);{let e=mp(process.argv.slice(2),{knownSubcommands:new Set(Q.commands.map(e=>e.name())),cwd:process.cwd(),isFileish:pp,resolvePath:(e,t)=>L(e,t)});if(e!==null){qn({command:`open-file`,cwd:process.cwd()}),zn()?.info({file:e.absPath,projectOverride:e.projectRoot},`single-file open dispatch`);let t=await gp(e.absPath,hp(),{projectRoot:e.projectRoot??void 0});process.exit(t)}}await Q.parseAsync(process.argv,{from:`node`});export{as as n,is as t};
|